From 7aabfb031708c4a76bd950eb3b452d3dc5411044 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Fri, 25 Sep 2020 08:02:08 +0530 Subject: [PATCH 1/8] Create __init__.py --- project_euler/problem_97/__init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 project_euler/problem_97/__init__.py diff --git a/project_euler/problem_97/__init__.py b/project_euler/problem_97/__init__.py new file mode 100644 index 000000000000..792d6005489e --- /dev/null +++ b/project_euler/problem_97/__init__.py @@ -0,0 +1 @@ +# From 0dacfdfd78942fcec057a2dd5a4df1c90b44475c Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Fri, 25 Sep 2020 08:04:36 +0530 Subject: [PATCH 2/8] Add files via upload --- project_euler/problem_97/sol1.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 project_euler/problem_97/sol1.py diff --git a/project_euler/problem_97/sol1.py b/project_euler/problem_97/sol1.py new file mode 100644 index 000000000000..0d59ea78a12f --- /dev/null +++ b/project_euler/problem_97/sol1.py @@ -0,0 +1,31 @@ +""" +The first known prime found to exceed one million digits was discovered in 1999, +and is a Mersenne prime of the form 2**6972593 − 1; it contains exactly 2,098,960 +digits. Subsequently other Mersenne primes, of the form 2**p − 1, have been found +which contain more digits. +However, in 2004 there was found a massive non-Mersenne prime which contains +2,357,207 digits: (28433 * (2 ** 7830457 + 1)). + +Find the last ten digits of this prime number. +""" + + +def compute_digits(n: int) -> str: + """ + Returns the last n digits of NUMBER. + >>> compute_digits(10) + '8740021009' + >>> compute_digits(-1) + -1 + >>> compute_digits(8.3) + -1 + """ + if n < 0 or not isinstance(n, int): + return -1 + MODULUS = 10 ** n + NUMBER = 28433 * (pow(2, 7830457, MODULUS) + 1) + return str(NUMBER % MODULUS) + + +if __name__ == "__main__": + print(f"{compute_digits(10)}") From a53236a3f8a85f692ee720be194f493468602c0e Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Fri, 25 Sep 2020 09:29:19 +0530 Subject: [PATCH 3/8] Update sol1.py --- project_euler/problem_97/sol1.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/project_euler/problem_97/sol1.py b/project_euler/problem_97/sol1.py index 0d59ea78a12f..d1d93461ab01 100644 --- a/project_euler/problem_97/sol1.py +++ b/project_euler/problem_97/sol1.py @@ -15,17 +15,24 @@ def compute_digits(n: int) -> str: Returns the last n digits of NUMBER. >>> compute_digits(10) '8740021009' + >>> compute_digits(8) + '40021009' + >>> compute_digits(1) + '9' >>> compute_digits(-1) - -1 + '' >>> compute_digits(8.3) - -1 + '' """ if n < 0 or not isinstance(n, int): - return -1 + return '' MODULUS = 10 ** n NUMBER = 28433 * (pow(2, 7830457, MODULUS) + 1) return str(NUMBER % MODULUS) if __name__ == "__main__": + from doctest import testmod + + testmod() print(f"{compute_digits(10)}") From 416b43c9d651392ad9c7b75fcfe714e03efbd07a Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Fri, 25 Sep 2020 09:35:28 +0530 Subject: [PATCH 4/8] Update sol1.py --- project_euler/problem_97/sol1.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project_euler/problem_97/sol1.py b/project_euler/problem_97/sol1.py index d1d93461ab01..5476872ee3d9 100644 --- a/project_euler/problem_97/sol1.py +++ b/project_euler/problem_97/sol1.py @@ -25,7 +25,7 @@ def compute_digits(n: int) -> str: '' """ if n < 0 or not isinstance(n, int): - return '' + return "" MODULUS = 10 ** n NUMBER = 28433 * (pow(2, 7830457, MODULUS) + 1) return str(NUMBER % MODULUS) @@ -33,6 +33,6 @@ def compute_digits(n: int) -> str: if __name__ == "__main__": from doctest import testmod - + testmod() print(f"{compute_digits(10)}") From 3adcc6ba824801bff0532319adc884008e4dfcfc Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Fri, 25 Sep 2020 12:53:54 +0530 Subject: [PATCH 5/8] Update sol1.py --- project_euler/problem_97/sol1.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/project_euler/problem_97/sol1.py b/project_euler/problem_97/sol1.py index 5476872ee3d9..917bc8306b09 100644 --- a/project_euler/problem_97/sol1.py +++ b/project_euler/problem_97/sol1.py @@ -10,24 +10,24 @@ """ -def compute_digits(n: int) -> str: +def solution(n: int = 10) -> str: """ Returns the last n digits of NUMBER. - >>> compute_digits(10) - '8740021009' - >>> compute_digits(8) - '40021009' - >>> compute_digits(1) - '9' - >>> compute_digits(-1) + >>> solution() + '8739992577' + >>> solution(8) + '39992577' + >>> solution(1) + '7' + >>> solution(-1) '' - >>> compute_digits(8.3) + >>> solution(8.3) '' """ if n < 0 or not isinstance(n, int): return "" MODULUS = 10 ** n - NUMBER = 28433 * (pow(2, 7830457, MODULUS) + 1) + NUMBER = 28433 * (pow(2, 7830457, MODULUS)) + 1 return str(NUMBER % MODULUS) @@ -35,4 +35,4 @@ def compute_digits(n: int) -> str: from doctest import testmod testmod() - print(f"{compute_digits(10)}") + print(f"{solution(10)}") From e7814eb508a475b958368a4bfbaf4700cad91ed5 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Fri, 25 Sep 2020 13:01:18 +0530 Subject: [PATCH 6/8] Update project_euler/problem_97/sol1.py Co-authored-by: Christian Clauss --- project_euler/problem_97/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_97/sol1.py b/project_euler/problem_97/sol1.py index 917bc8306b09..1ae4aa674d63 100644 --- a/project_euler/problem_97/sol1.py +++ b/project_euler/problem_97/sol1.py @@ -27,7 +27,7 @@ def solution(n: int = 10) -> str: if n < 0 or not isinstance(n, int): return "" MODULUS = 10 ** n - NUMBER = 28433 * (pow(2, 7830457, MODULUS)) + 1 + NUMBER = 28433 * pow(2, 7830457, MODULUS) + 1 return str(NUMBER % MODULUS) From 715d7b098ebd4df0be5dbc4c0cad8b941b76a428 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Fri, 25 Sep 2020 13:38:00 +0530 Subject: [PATCH 7/8] Update sol1.py --- project_euler/problem_97/sol1.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/project_euler/problem_97/sol1.py b/project_euler/problem_97/sol1.py index 1ae4aa674d63..3d12b3f6530c 100644 --- a/project_euler/problem_97/sol1.py +++ b/project_euler/problem_97/sol1.py @@ -20,14 +20,22 @@ def solution(n: int = 10) -> str: >>> solution(1) '7' >>> solution(-1) - '' + Traceback (most recent call last): + ... + ValueError: Invalid input >>> solution(8.3) - '' + Traceback (most recent call last): + ... + ValueError: Invalid input + >>> solution("a") + Traceback (most recent call last): + ... + ValueError: Invalid input """ - if n < 0 or not isinstance(n, int): - return "" + if not isinstance(n, int) or n < 0: + raise ValueError("Invalid input") MODULUS = 10 ** n - NUMBER = 28433 * pow(2, 7830457, MODULUS) + 1 + NUMBER = 28433 * (pow(2, 7830457, MODULUS)) + 1 return str(NUMBER % MODULUS) From 90e4ed21de3cbced3b37d8118d68b5f5c9901de7 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Fri, 25 Sep 2020 15:14:38 +0530 Subject: [PATCH 8/8] Update project_euler/problem_97/sol1.py Co-authored-by: Christian Clauss --- project_euler/problem_97/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_97/sol1.py b/project_euler/problem_97/sol1.py index 3d12b3f6530c..2e848c09a940 100644 --- a/project_euler/problem_97/sol1.py +++ b/project_euler/problem_97/sol1.py @@ -43,4 +43,4 @@ def solution(n: int = 10) -> str: from doctest import testmod testmod() - print(f"{solution(10)}") + print(f"{solution(10) = }")