1
1
from math import sqrt
2
2
from typing import List
3
3
4
- def factors (n : int ) -> List [int ]:
4
+
5
+ def factors (n : int ) -> list [int ]:
5
6
6
7
v = []
7
8
v .append (1 )
@@ -15,53 +16,56 @@ def factors(n : int) -> List[int]:
15
16
return v
16
17
17
18
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
19
+ def abundant (n : int ) -> bool :
20
+ sum = 0
21
+ v = factors (n )
22
+ for i in range (len (v )):
23
+ sum += v [i ]
24
+ if sum > n :
25
+ return True
26
+ else :
27
+ return False
28
+
27
29
28
30
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
31
+ v = factors (n )
32
+ v .sort (reverse = False )
33
+ r = len (v )
34
+ subset = [[0 for i in range (n + 1 )] for j in range (r + 1 )]
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 : int ) -> bool :
55
+ if abundant (n ) == True and semi_perfect (n ) == False :
56
+ return True
57
+ else :
58
+ return False
59
+
57
60
58
61
def main () -> None :
59
- n = 70
60
- if (weird (n )):
61
- print ("Weird Number" )
62
- else :
63
- print ("Not Weird Number" )
64
-
62
+ n = 70
63
+ if weird (n ):
64
+ print ("Weird Number" )
65
+ else :
66
+ print ("Not Weird Number" )
67
+
68
+
65
69
if __name__ == "__main__" :
66
70
import doctest
67
71
0 commit comments