Skip to content

Commit 9a44b4e

Browse files
authored
resolved
1 parent 782012b commit 9a44b4e

File tree

1 file changed

+49
-53
lines changed

1 file changed

+49
-53
lines changed

maths/weird_number.py

Lines changed: 49 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from math import sqrt
2+
from typing import List
23

3-
4-
def factors(n):
4+
def factors(n : int) -> List[int]:
55

66
v = []
77
v.append(1)
@@ -15,57 +15,53 @@ def factors(n):
1515
return v
1616

1717

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+
6965
if __name__ == "__main__":
7066
import doctest
7167

0 commit comments

Comments
 (0)