Skip to content
Prev Previous commit
Next Next commit
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
  • Loading branch information
pre-commit-ci[bot] committed Oct 9, 2022
commit 782012b3f988e952c1092fd4ba2f0c078211d257
110 changes: 57 additions & 53 deletions maths/weird_number.py
Original file line number Diff line number Diff line change
@@ -1,69 +1,73 @@
from math import sqrt


def factors(n):

v = []
v.append(1)
v = []
v.append(1)

for i in range(2, int(sqrt(n)) + 1, 1):
for i in range(2, int(sqrt(n)) + 1, 1):

if n % i == 0:
v.append(i)
if int(n / i) != i:
v.append(int(n / i))
return v

if (n % i == 0):
v.append(i)
if (int(n / i) != i):
v.append(int(n / i))
return v

def abundant(n):
sum = 0
v = factors(n)
for i in range(len(v)):
sum += v[i]
if (sum > n):
return True
else:
return False
sum = 0
v = factors(n)
for i in range(len(v)):
sum += v[i]
if sum > n:
return True
else:
return False


def semiPerfect(n):
v = factors(n)
v.sort(reverse = False)
r = len(v)
subset = [[0 for i in range(n + 1)]
for j in range(r + 1)]

for i in range(r + 1):
subset[i][0] = True

for i in range(1, n + 1):
subset[0][i] = False

for i in range(1, r + 1):
for j in range(1, n + 1):
if (j < v[i - 1]):
subset[i][j] = subset[i - 1][j]
else:
subset[i][j] = (subset[i - 1][j] or
subset[i - 1][j - v[i - 1]])

if ((subset[r][n]) == 0):
return False
else:
return True
v = factors(n)
v.sort(reverse=False)
r = len(v)
subset = [[0 for i in range(n + 1)] for j in range(r + 1)]

for i in range(r + 1):
subset[i][0] = True

for i in range(1, n + 1):
subset[0][i] = False

for i in range(1, r + 1):
for j in range(1, n + 1):
if j < v[i - 1]:
subset[i][j] = subset[i - 1][j]
else:
subset[i][j] = subset[i - 1][j] or subset[i - 1][j - v[i - 1]]

if (subset[r][n]) == 0:
return False
else:
return True


def weird(n):
if (abundant(n) == True and semiPerfect(n) == False):
return True
else:
return False
if abundant(n) == True and semiPerfect(n) == False:
return True
else:
return False


def main():
n = 70
if (weird(n)):
print("Weird Number")
else:
print("Not Weird Number")

n = 70
if weird(n):
print("Weird Number")
else:
print("Not Weird Number")


if __name__ == "__main__":
import doctest
doctest.testmod(verbose=True)
main()
import doctest

doctest.testmod(verbose=True)
main()