From 7eef761153e61e0da92243edef66c08139dc2699 Mon Sep 17 00:00:00 2001 From: VARISH GAUTAM <48176176+Variiiest@users.noreply.github.com> Date: Sun, 9 Oct 2022 16:48:14 +0530 Subject: [PATCH 1/9] Create weird_number.py In number theory, a weird number is a natural number that is abundant but not semiperfect --- maths/weird_number.py | 71 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 maths/weird_number.py diff --git a/maths/weird_number.py b/maths/weird_number.py new file mode 100644 index 000000000000..e9be714572ea --- /dev/null +++ b/maths/weird_number.py @@ -0,0 +1,71 @@ +rom math import sqrt + +def factors(n): + + v = [] + v.append(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 + +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 + +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 + +def weird(n): + 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") + +if __name__ == "__main__": + import doctest + doctest.testmod(verbose=True) + main() From d1a5ae9370252807e7ec55973c370740cb40d050 Mon Sep 17 00:00:00 2001 From: VARISH GAUTAM <48176176+Variiiest@users.noreply.github.com> Date: Sun, 9 Oct 2022 16:56:21 +0530 Subject: [PATCH 2/9] check --- maths/weird_number.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/maths/weird_number.py b/maths/weird_number.py index e9be714572ea..9f992cd81c87 100644 --- a/maths/weird_number.py +++ b/maths/weird_number.py @@ -1,4 +1,4 @@ -rom math import sqrt +from math import sqrt def factors(n): @@ -56,10 +56,8 @@ def weird(n): else: return False - def main(): - n = 70 - + n = 70 if (weird(n)): print("Weird Number") else: From 782012b3f988e952c1092fd4ba2f0c078211d257 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 9 Oct 2022 11:29:48 +0000 Subject: [PATCH 3/9] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/weird_number.py | 110 ++++++++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 53 deletions(-) diff --git a/maths/weird_number.py b/maths/weird_number.py index 9f992cd81c87..5a9d8d8e8afb 100644 --- a/maths/weird_number.py +++ b/maths/weird_number.py @@ -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() From 9a44b4eddca6761ffbf5ac9480f1d0ac78ce2e4c Mon Sep 17 00:00:00 2001 From: VARISH GAUTAM <48176176+Variiiest@users.noreply.github.com> Date: Sun, 9 Oct 2022 17:12:15 +0530 Subject: [PATCH 4/9] resolved --- maths/weird_number.py | 102 ++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 53 deletions(-) diff --git a/maths/weird_number.py b/maths/weird_number.py index 5a9d8d8e8afb..470015158291 100644 --- a/maths/weird_number.py +++ b/maths/weird_number.py @@ -1,7 +1,7 @@ from math import sqrt +from typing import List - -def factors(n): +def factors(n : int) -> List[int]: v = [] v.append(1) @@ -15,57 +15,53 @@ def factors(n): 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 - - -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 - - -def weird(n): - 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") - - +def abundant(n : int) -> bool: + sum = 0 + v = factors(n) + for i in range(len(v)): + sum += v[i] + if (sum > n): + return True + else: + return False + +def semi_perfect(n: int) -> bool: + 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 : int) -> bool: + if (abundant(n) == True and semi_perfect(n) == False): + return True + else: + return False + +def main() -> None: + n = 70 + if (weird(n)): + print("Weird Number") + else: + print("Not Weird Number") + if __name__ == "__main__": import doctest From ba747dfa6bea5f1b51bae0550a44374a5b302521 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 9 Oct 2022 11:43:36 +0000 Subject: [PATCH 5/9] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/weird_number.py | 92 ++++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 44 deletions(-) diff --git a/maths/weird_number.py b/maths/weird_number.py index 470015158291..011af612a612 100644 --- a/maths/weird_number.py +++ b/maths/weird_number.py @@ -1,7 +1,8 @@ from math import sqrt from typing import List -def factors(n : int) -> List[int]: + +def factors(n: int) -> list[int]: v = [] v.append(1) @@ -15,53 +16,56 @@ def factors(n : int) -> List[int]: return v -def abundant(n : int) -> bool: - sum = 0 - v = factors(n) - for i in range(len(v)): - sum += v[i] - if (sum > n): - return True - else: - return False +def abundant(n: int) -> bool: + sum = 0 + v = factors(n) + for i in range(len(v)): + sum += v[i] + if sum > n: + return True + else: + return False + def semi_perfect(n: int) -> bool: - 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 : int) -> bool: - if (abundant(n) == True and semi_perfect(n) == False): - return True - else: - return False + 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: int) -> bool: + if abundant(n) == True and semi_perfect(n) == False: + return True + else: + return False + def main() -> None: - 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 From f747cf91fc09689929e7b82e37c780066c7213ac Mon Sep 17 00:00:00 2001 From: VARISH GAUTAM <48176176+Variiiest@users.noreply.github.com> Date: Sun, 9 Oct 2022 17:17:55 +0530 Subject: [PATCH 6/9] removed --- maths/weird_number.py | 1 - 1 file changed, 1 deletion(-) diff --git a/maths/weird_number.py b/maths/weird_number.py index 011af612a612..d7617d909512 100644 --- a/maths/weird_number.py +++ b/maths/weird_number.py @@ -1,5 +1,4 @@ from math import sqrt -from typing import List def factors(n: int) -> list[int]: From 3d2efcecaf28b4b0f8e2051f4dcb967eeb785c4d Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Wed, 12 Oct 2022 22:36:55 +0200 Subject: [PATCH 7/9] Update weird_number.py --- maths/weird_number.py | 125 ++++++++++++++++++++++++++---------------- 1 file changed, 79 insertions(+), 46 deletions(-) diff --git a/maths/weird_number.py b/maths/weird_number.py index d7617d909512..b2d9b678bf9e 100644 --- a/maths/weird_number.py +++ b/maths/weird_number.py @@ -1,72 +1,105 @@ +""" +https://en.wikipedia.org/wiki/Weird_number + +Fun fact: The set of weird numbers has positive asymptotic density. +""" + from math import sqrt -def factors(n: int) -> list[int]: +from math import sqrt + - v = [] - v.append(1) +def factors(number: int) -> list[int]: + """ + >>> factors(12) + [1, 2, 3, 4, 6] + >>> factors(1) + [1] + >>> factors(100) + [1, 2, 4, 5, 10, 20, 25, 50] - for i in range(2, int(sqrt(n)) + 1, 1): + # >>> factors(-12) + # [1, 2, 3, 4, 6] + """ - if n % i == 0: - v.append(i) - if int(n / i) != i: - v.append(int(n / i)) - return v + values = [1] + for i in range(2, int(sqrt(number)) + 1, 1): + + if number % i == 0: + values.append(i) + if int(number // i) != i: + values.append(int(number // i)) + return sorted(values) def abundant(n: int) -> bool: - sum = 0 - v = factors(n) - for i in range(len(v)): - sum += v[i] - if sum > n: - return True - else: - return False - - -def semi_perfect(n: int) -> bool: - v = factors(n) - v.sort(reverse=False) - r = len(v) - subset = [[0 for i in range(n + 1)] for j in range(r + 1)] + """ + >>> abundant(0) + True + >>> abundant(1) + False + >>> abundant(12) + True + >>> abundant(13) + False + >>> abundant(20) + True + + # >>> abundant(-12) + # True + """ + return sum(factors(n)) > n + + +def semi_perfect(number: int) -> bool: + """ + >>> semi_perfect(0) + True + >>> semi_perfect(1) + True + >>> semi_perfect(12) + True + >>> semi_perfect(13) + False + + # >>> semi_perfect(-12) + # True + """ + values = factors(number) + r = len(values) + subset = [[0 for i in range(number + 1)] for j in range(r + 1)] for i in range(r + 1): subset[i][0] = True - for i in range(1, n + 1): + for i in range(1, number + 1): subset[0][i] = False for i in range(1, r + 1): - for j in range(1, n + 1): - if j < v[i - 1]: + for j in range(1, number + 1): + if j < values[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 - + subset[i][j] = subset[i - 1][j] or subset[i - 1][j - values[i - 1]] -def weird(n: int) -> bool: - if abundant(n) == True and semi_perfect(n) == False: - return True - else: - return False + return subset[r][number] != 0 -def main() -> None: - n = 70 - if weird(n): - print("Weird Number") - else: - print("Not Weird Number") +def weird(number: int) -> bool: + """ + >>> weird(0) + False + >>> weird(70) + True + >>> weird(77) + False + """ + return abundant(number) and not semi_perfect(number) if __name__ == "__main__": import doctest doctest.testmod(verbose=True) - main() + for number in (69, 70, 71): + print(f"{number} is {'' if weird(number) else 'not '}weird.") From 18e9dd7b8ee4ea401cf5cff5051ee1b2f5fe37ef Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Wed, 12 Oct 2022 22:37:38 +0200 Subject: [PATCH 8/9] Update weird_number.py --- maths/weird_number.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/maths/weird_number.py b/maths/weird_number.py index b2d9b678bf9e..49ea983a3845 100644 --- a/maths/weird_number.py +++ b/maths/weird_number.py @@ -3,10 +3,6 @@ Fun fact: The set of weird numbers has positive asymptotic density. """ - -from math import sqrt - - from math import sqrt From 6d0d8f4afb79906f175db5779d89cce12d1a0460 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Wed, 12 Oct 2022 22:38:14 +0200 Subject: [PATCH 9/9] Update weird_number.py --- maths/weird_number.py | 1 - 1 file changed, 1 deletion(-) diff --git a/maths/weird_number.py b/maths/weird_number.py index 49ea983a3845..2834a9fee31e 100644 --- a/maths/weird_number.py +++ b/maths/weird_number.py @@ -21,7 +21,6 @@ def factors(number: int) -> list[int]: values = [1] for i in range(2, int(sqrt(number)) + 1, 1): - if number % i == 0: values.append(i) if int(number // i) != i: