From eacca6be0b602f2516b264ad855f0ac25abea9b0 Mon Sep 17 00:00:00 2001 From: Paulo Ferraz Date: Wed, 29 Dec 2021 19:35:46 -0300 Subject: [PATCH 1/8] Fixes (#5434) * Update ciphers.rabin_miller.py maths.miller_rabin.py --- ciphers/rabin_miller.py | 6 +++--- maths/miller_rabin.py | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ciphers/rabin_miller.py b/ciphers/rabin_miller.py index 65c162984ece..be9f503a9720 100644 --- a/ciphers/rabin_miller.py +++ b/ciphers/rabin_miller.py @@ -25,7 +25,7 @@ def rabinMiller(num: int) -> bool: return True -def isPrime(num: int) -> bool: +def low_num_is_prime(num: int) -> bool: if num < 2: return False @@ -213,11 +213,11 @@ def isPrime(num: int) -> bool: def generateLargePrime(keysize: int = 1024) -> int: while True: num = random.randrange(2 ** (keysize - 1), 2 ** (keysize)) - if isPrime(num): + if low_num_is_prime(num): return num if __name__ == "__main__": num = generateLargePrime() print(("Prime number:", num)) - print(("isPrime:", isPrime(num))) + print(("low_num_is_prime:", low_num_is_prime(num))) diff --git a/maths/miller_rabin.py b/maths/miller_rabin.py index 2b0944508b4b..0e5aacd72cb5 100644 --- a/maths/miller_rabin.py +++ b/maths/miller_rabin.py @@ -1,16 +1,16 @@ import random -from .binary_exp_mod import bin_exp_mod +from binary_exp_mod import bin_exp_mod # This is a probabilistic check to test primality, useful for big numbers! # if it's a prime, it will return true # if it's not a prime, the chance of it returning true is at most 1/4**prec -def is_prime(n, prec=1000): +def big_num_is_prime(n, prec=1000): """ - >>> from .prime_check import prime_check - >>> # all(is_prime(i) == prime_check(i) for i in range(1000)) # 3.45s - >>> all(is_prime(i) == prime_check(i) for i in range(256)) + >>> from maths.prime_check import prime_check + >>> # all(big_num_is_prime(i) == prime_check(i) for i in range(1000)) # 3.45s + >>> all(big_num_is_prime(i) == prime_check(i) for i in range(256)) True """ if n < 2: @@ -48,4 +48,4 @@ def is_prime(n, prec=1000): if __name__ == "__main__": n = abs(int(input("Enter bound : ").strip())) print("Here's the list of primes:") - print(", ".join(str(i) for i in range(n + 1) if is_prime(i))) + print(", ".join(str(i) for i in range(n + 1) if big_num_is_prime(i))) From 4e82508373d027f4392a1b2810e4da75c7851cbf Mon Sep 17 00:00:00 2001 From: Paulo Ferraz Date: Thu, 3 Feb 2022 16:39:52 -0300 Subject: [PATCH 2/8] Fixing ERROR maths/miller_rabin.py - ModuleNotFoundError and changing project_euler's isPrime to is_prime function names --- maths/miller_rabin.py | 2 +- project_euler/problem_003/sol1.py | 22 +++++++++++----------- project_euler/problem_007/sol2.py | 13 +++++++------ project_euler/problem_007/sol3.py | 10 +++++----- project_euler/problem_058/sol1.py | 10 +++++----- 5 files changed, 29 insertions(+), 28 deletions(-) diff --git a/maths/miller_rabin.py b/maths/miller_rabin.py index 0e5aacd72cb5..52f98d74b854 100644 --- a/maths/miller_rabin.py +++ b/maths/miller_rabin.py @@ -1,6 +1,6 @@ import random -from binary_exp_mod import bin_exp_mod +from .binary_exp_mod import bin_exp_mod # This is a probabilistic check to test primality, useful for big numbers! diff --git a/project_euler/problem_003/sol1.py b/project_euler/problem_003/sol1.py index 1f329984203a..606a6945e4ad 100644 --- a/project_euler/problem_003/sol1.py +++ b/project_euler/problem_003/sol1.py @@ -13,23 +13,23 @@ import math -def isprime(num: int) -> bool: +def is_prime(num: int) -> bool: """ Returns boolean representing primality of given number num. - >>> isprime(2) + >>> is_prime(2) True - >>> isprime(3) + >>> is_prime(3) True - >>> isprime(27) + >>> is_prime(27) False - >>> isprime(2999) + >>> is_prime(2999) True - >>> isprime(0) + >>> is_prime(0) Traceback (most recent call last): ... ValueError: Parameter num must be greater than or equal to two. - >>> isprime(1) + >>> is_prime(1) Traceback (most recent call last): ... ValueError: Parameter num must be greater than or equal to two. @@ -84,18 +84,18 @@ def solution(n: int = 600851475143) -> int: if n <= 0: raise ValueError("Parameter n must be greater than or equal to one.") max_number = 0 - if isprime(n): + if is_prime(n): return n while n % 2 == 0: n //= 2 - if isprime(n): + if is_prime(n): return n for i in range(3, int(math.sqrt(n)) + 1, 2): if n % i == 0: - if isprime(n // i): + if is_prime(n // i): max_number = n // i break - elif isprime(i): + elif is_prime(i): max_number = i return max_number diff --git a/project_euler/problem_007/sol2.py b/project_euler/problem_007/sol2.py index 20c2ddf21ab8..c3065e9585ed 100644 --- a/project_euler/problem_007/sol2.py +++ b/project_euler/problem_007/sol2.py @@ -11,17 +11,18 @@ References: - https://en.wikipedia.org/wiki/Prime_number """ +from typing import List -def isprime(number: int) -> bool: +def is_prime(number: int) -> bool: """ Determines whether the given number is prime or not - >>> isprime(2) + >>> is_prime(2) True - >>> isprime(15) + >>> is_prime(15) False - >>> isprime(29) + >>> is_prime(29) True """ @@ -73,10 +74,10 @@ def solution(nth: int = 10001) -> int: raise TypeError("Parameter nth must be int or castable to int.") from None if nth <= 0: raise ValueError("Parameter nth must be greater than or equal to one.") - primes: list[int] = [] + primes: List[int] = [] num = 2 while len(primes) < nth: - if isprime(num): + if is_prime(num): primes.append(num) num += 1 else: diff --git a/project_euler/problem_007/sol3.py b/project_euler/problem_007/sol3.py index 7911fa3e9d6f..daa719cefbda 100644 --- a/project_euler/problem_007/sol3.py +++ b/project_euler/problem_007/sol3.py @@ -15,15 +15,15 @@ import math -def prime_check(number: int) -> bool: +def is_prime(number: int) -> bool: """ Determines whether a given number is prime or not - >>> prime_check(2) + >>> is_prime(2) True - >>> prime_check(15) + >>> is_prime(15) False - >>> prime_check(29) + >>> is_prime(29) True """ @@ -39,7 +39,7 @@ def prime_generator(): num = 2 while True: - if prime_check(num): + if is_prime(num): yield num num += 1 diff --git a/project_euler/problem_058/sol1.py b/project_euler/problem_058/sol1.py index ed407edf7158..661bb8d9f66a 100644 --- a/project_euler/problem_058/sol1.py +++ b/project_euler/problem_058/sol1.py @@ -36,14 +36,14 @@ from math import isqrt -def isprime(number: int) -> int: +def is_prime(number: int) -> int: """ returns whether the given number is prime or not - >>> isprime(1) + >>> is_prime(1) 0 - >>> isprime(17) + >>> is_prime(17) 1 - >>> isprime(10000) + >>> is_prime(10000) 0 """ if number == 1: @@ -76,7 +76,7 @@ def solution(ratio: float = 0.1) -> int: while primes / (2 * j - 1) >= ratio: for i in range(j * j + j + 1, (j + 2) * (j + 2), j + 1): - primes = primes + isprime(i) + primes = primes + is_prime(i) j = j + 2 return j From 47d2a02235b6f18044ce2c3287f8aa6080b3b969 Mon Sep 17 00:00:00 2001 From: John Law Date: Thu, 24 Mar 2022 18:26:39 +0800 Subject: [PATCH 3/8] Update sol1.py --- project_euler/problem_058/sol1.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/project_euler/problem_058/sol1.py b/project_euler/problem_058/sol1.py index 661bb8d9f66a..ade9b100fade 100644 --- a/project_euler/problem_058/sol1.py +++ b/project_euler/problem_058/sol1.py @@ -76,9 +76,8 @@ def solution(ratio: float = 0.1) -> int: while primes / (2 * j - 1) >= ratio: for i in range(j * j + j + 1, (j + 2) * (j + 2), j + 1): - primes = primes + is_prime(i) - - j = j + 2 + primes += is_prime(i) + j += 2 return j From a8e3bdbd0fd9a38d47660e9e3b2993efbf3aa926 Mon Sep 17 00:00:00 2001 From: John Law Date: Thu, 24 Mar 2022 18:33:12 +0800 Subject: [PATCH 4/8] fix: try to change to list --- project_euler/problem_007/sol2.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/project_euler/problem_007/sol2.py b/project_euler/problem_007/sol2.py index c3065e9585ed..10ca5c615e6b 100644 --- a/project_euler/problem_007/sol2.py +++ b/project_euler/problem_007/sol2.py @@ -11,8 +11,6 @@ References: - https://en.wikipedia.org/wiki/Prime_number """ -from typing import List - def is_prime(number: int) -> bool: """ @@ -74,7 +72,7 @@ def solution(nth: int = 10001) -> int: raise TypeError("Parameter nth must be int or castable to int.") from None if nth <= 0: raise ValueError("Parameter nth must be greater than or equal to one.") - primes: List[int] = [] + primes: list[int] = [] num = 2 while len(primes) < nth: if is_prime(num): From 30a1a94b1e46d7cdf7a6380918dce70e37fe3f42 Mon Sep 17 00:00:00 2001 From: John Law Date: Thu, 24 Mar 2022 23:52:49 +0800 Subject: [PATCH 5/8] fix pre-commit --- project_euler/problem_007/sol2.py | 1 + 1 file changed, 1 insertion(+) diff --git a/project_euler/problem_007/sol2.py b/project_euler/problem_007/sol2.py index 10ca5c615e6b..53a1527e64b1 100644 --- a/project_euler/problem_007/sol2.py +++ b/project_euler/problem_007/sol2.py @@ -12,6 +12,7 @@ - https://en.wikipedia.org/wiki/Prime_number """ + def is_prime(number: int) -> bool: """ Determines whether the given number is prime or not From 09b1ab4b2ee463b8ca6393c59e75a8a395a09aae Mon Sep 17 00:00:00 2001 From: John Law Date: Fri, 25 Mar 2022 01:12:36 +0800 Subject: [PATCH 6/8] fix capital letters --- project_euler/problem_058/sol1.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project_euler/problem_058/sol1.py b/project_euler/problem_058/sol1.py index ade9b100fade..c59b0dd71af1 100644 --- a/project_euler/problem_058/sol1.py +++ b/project_euler/problem_058/sol1.py @@ -38,7 +38,7 @@ def is_prime(number: int) -> int: """ - returns whether the given number is prime or not + Returns whether the given number is prime or not >>> is_prime(1) 0 >>> is_prime(17) @@ -60,7 +60,7 @@ def is_prime(number: int) -> int: def solution(ratio: float = 0.1) -> int: """ - returns the side length of the square spiral of odd length greater + Returns the side length of the square spiral of odd length greater than 1 for which the ratio of primes along both diagonals first falls below the given ratio. >>> solution(.5) From 03d8a7ee454bac14ecb6c1860b161a93495b6816 Mon Sep 17 00:00:00 2001 From: John Law Date: Sat, 9 Apr 2022 01:36:45 +0800 Subject: [PATCH 7/8] Update miller_rabin.py --- maths/miller_rabin.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/maths/miller_rabin.py b/maths/miller_rabin.py index 52f98d74b854..d35e5485888f 100644 --- a/maths/miller_rabin.py +++ b/maths/miller_rabin.py @@ -6,11 +6,11 @@ # This is a probabilistic check to test primality, useful for big numbers! # if it's a prime, it will return true # if it's not a prime, the chance of it returning true is at most 1/4**prec -def big_num_is_prime(n, prec=1000): +def is_prime_big(n, prec=1000): """ >>> from maths.prime_check import prime_check - >>> # all(big_num_is_prime(i) == prime_check(i) for i in range(1000)) # 3.45s - >>> all(big_num_is_prime(i) == prime_check(i) for i in range(256)) + >>> # all(is_prime_big(i) == prime_check(i) for i in range(1000)) # 3.45s + >>> all(is_prime_big(i) == prime_check(i) for i in range(256)) True """ if n < 2: @@ -48,4 +48,4 @@ def big_num_is_prime(n, prec=1000): if __name__ == "__main__": n = abs(int(input("Enter bound : ").strip())) print("Here's the list of primes:") - print(", ".join(str(i) for i in range(n + 1) if big_num_is_prime(i))) + print(", ".join(str(i) for i in range(n + 1) if is_prime_big(i))) From f733742ffcdbbef85cae66189cdf9807a4ef541b Mon Sep 17 00:00:00 2001 From: John Law Date: Sat, 9 Apr 2022 01:37:19 +0800 Subject: [PATCH 8/8] Update rabin_miller.py --- ciphers/rabin_miller.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ciphers/rabin_miller.py b/ciphers/rabin_miller.py index 43fd6910531d..a9b834bfb4be 100644 --- a/ciphers/rabin_miller.py +++ b/ciphers/rabin_miller.py @@ -25,7 +25,7 @@ def rabinMiller(num: int) -> bool: return True -def low_num_is_prime(num: int) -> bool: +def is_prime_low_num(num: int) -> bool: if num < 2: return False @@ -213,11 +213,11 @@ def low_num_is_prime(num: int) -> bool: def generateLargePrime(keysize: int = 1024) -> int: while True: num = random.randrange(2 ** (keysize - 1), 2 ** (keysize)) - if low_num_is_prime(num): + if is_prime_low_num(num): return num if __name__ == "__main__": num = generateLargePrime() print(("Prime number:", num)) - print(("low_num_is_prime:", low_num_is_prime(num))) + print(("is_prime_low_num:", is_prime_low_num(num)))