1
1
from math import sqrt
2
+ from typing import List
2
3
3
-
4
- def factors (n ):
4
+ def factors (n : int ) -> List [int ]:
5
5
6
6
v = []
7
7
v .append (1 )
@@ -15,57 +15,53 @@ def factors(n):
15
15
return v
16
16
17
17
18
- def abundant (n ):
19
- sum = 0
20
- v = factors (n )
21
- for i in range (len (v )):
22
- sum += v [i ]
23
- if sum > n :
24
- return True
25
- else :
26
- return False
27
-
28
-
29
- def semiPerfect (n ):
30
- v = factors (n )
31
- v .sort (reverse = False )
32
- r = len (v )
33
- subset = [[0 for i in range (n + 1 )] for j in range (r + 1 )]
34
-
35
- for i in range (r + 1 ):
36
- subset [i ][0 ] = True
37
-
38
- for i in range (1 , n + 1 ):
39
- subset [0 ][i ] = False
40
-
41
- for i in range (1 , r + 1 ):
42
- for j in range (1 , n + 1 ):
43
- if j < v [i - 1 ]:
44
- subset [i ][j ] = subset [i - 1 ][j ]
45
- else :
46
- subset [i ][j ] = subset [i - 1 ][j ] or subset [i - 1 ][j - v [i - 1 ]]
47
-
48
- if (subset [r ][n ]) == 0 :
49
- return False
50
- else :
51
- return True
52
-
53
-
54
- def weird (n ):
55
- if abundant (n ) == True and semiPerfect (n ) == False :
56
- return True
57
- else :
58
- return False
59
-
60
-
61
- def main ():
62
- n = 70
63
- if weird (n ):
64
- print ("Weird Number" )
65
- else :
66
- print ("Not Weird Number" )
67
-
68
-
18
+ def abundant (n : int ) -> bool :
19
+ sum = 0
20
+ v = factors (n )
21
+ for i in range (len (v )):
22
+ sum += v [i ]
23
+ if (sum > n ):
24
+ return True
25
+ else :
26
+ return False
27
+
28
+ def semi_perfect (n : int ) -> bool :
29
+ v = factors (n )
30
+ v .sort (reverse = False )
31
+ r = len (v )
32
+ subset = [[0 for i in range (n + 1 )]
33
+ for j in range (r + 1 )]
34
+ for i in range (r + 1 ):
35
+ subset [i ][0 ] = True
36
+
37
+ for i in range (1 , n + 1 ):
38
+ subset [0 ][i ] = False
39
+
40
+ for i in range (1 , r + 1 ):
41
+ for j in range (1 , n + 1 ):
42
+ if j < v [i - 1 ]:
43
+ subset [i ][j ] = subset [i - 1 ][j ]
44
+ else :
45
+ subset [i ][j ] = subset [i - 1 ][j ] or subset [i - 1 ][j - v [i - 1 ]]
46
+
47
+ if (subset [r ][n ]) == 0 :
48
+ return False
49
+ else :
50
+ return True
51
+
52
+ def weird (n : int ) -> bool :
53
+ if (abundant (n ) == True and semi_perfect (n ) == False ):
54
+ return True
55
+ else :
56
+ return False
57
+
58
+ def main () -> None :
59
+ n = 70
60
+ if (weird (n )):
61
+ print ("Weird Number" )
62
+ else :
63
+ print ("Not Weird Number" )
64
+
69
65
if __name__ == "__main__" :
70
66
import doctest
71
67
0 commit comments