From 545b513a6ab7dc43551df636775a2b91be79eb38 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Fri, 21 Aug 2020 13:04:30 +0530 Subject: [PATCH 1/8] Create __init__.py --- project_euler/problem_46/__init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 project_euler/problem_46/__init__.py diff --git a/project_euler/problem_46/__init__.py b/project_euler/problem_46/__init__.py new file mode 100644 index 000000000000..792d6005489e --- /dev/null +++ b/project_euler/problem_46/__init__.py @@ -0,0 +1 @@ +# From b4f99cfa293671934e1e2697733d21f2b60bb290 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Fri, 21 Aug 2020 13:04:50 +0530 Subject: [PATCH 2/8] Add files via upload --- project_euler/problem_46/sol1.py | 70 ++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 project_euler/problem_46/sol1.py diff --git a/project_euler/problem_46/sol1.py b/project_euler/problem_46/sol1.py new file mode 100644 index 000000000000..dd628ead6a78 --- /dev/null +++ b/project_euler/problem_46/sol1.py @@ -0,0 +1,70 @@ +""" +It was proposed by Christian Goldbach that every odd composite number can be +written as the sum of a prime and twice a square. + +9 = 7 + 2 × 12 +15 = 7 + 2 × 22 +21 = 3 + 2 × 32 +25 = 7 + 2 × 32 +27 = 19 + 2 × 22 +33 = 31 + 2 × 12 + +It turns out that the conjecture was false. + +What is the smallest odd composite that cannot be written as the sum of a +prime and twice a square? +""" + +from typing import List + +seive = [True] * 100001 +i = 2 +while i * i <= 100000: + if seive[i]: + for j in range(i * i, 100001, i): + seive[j] = False + i += 1 + + +def is_prime(n: int) -> bool: + """ + Returns True if n is prime, + False otherwise, for 2 <= n <= 100000 + >>> is_prime(87) + False + >>> is_prime(23) + True + >>> is_prime(25363) + False + """ + return seive[n] + + +odd_composites = [num for num in range(3, len(seive), 2) if not is_prime(num)] + + +def compute_nums(n: int) -> List[int]: + """ + Returns a list of first n odd composite numbers which do + not follow the conjecture. + >>> compute_nums(1) + [5777] + >>> compute_nums(2) + [5777, 5993] + """ + list_nums = [] + for num in range(len(odd_composites)): + i = 0 + while 2 * i * i <= odd_composites[num]: + rem = odd_composites[num] - 2 * i * i + if is_prime(rem): + break + i += 1 + else: + list_nums.append(odd_composites[num]) + if len(list_nums) == n: + return list_nums + + +if __name__ == "__main__": + print(compute_nums(2)) From f1eb03ac52d5bc2aa2a118132a997e28d7ca65ae Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Fri, 21 Aug 2020 13:07:49 +0530 Subject: [PATCH 3/8] Update sol1.py --- project_euler/problem_46/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_46/sol1.py b/project_euler/problem_46/sol1.py index dd628ead6a78..6491b4e56814 100644 --- a/project_euler/problem_46/sol1.py +++ b/project_euler/problem_46/sol1.py @@ -67,4 +67,4 @@ def compute_nums(n: int) -> List[int]: if __name__ == "__main__": - print(compute_nums(2)) + print(f"{compute_nums(2) = }") From fbde7961f105d7f40afded0541acd2f35b1179b9 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Fri, 21 Aug 2020 16:06:19 +0530 Subject: [PATCH 4/8] Update sol1.py --- project_euler/problem_46/sol1.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/project_euler/problem_46/sol1.py b/project_euler/problem_46/sol1.py index 6491b4e56814..7177e1441f71 100644 --- a/project_euler/problem_46/sol1.py +++ b/project_euler/problem_46/sol1.py @@ -51,7 +51,23 @@ def compute_nums(n: int) -> List[int]: [5777] >>> compute_nums(2) [5777, 5993] + >>> compute_nums(0) + Traceback (most recent call last): + ... + ValueError: n must be => 0 + >>> compute_nums("a") + Traceback (most recent call last): + ... + ValueError: n must be an exact integer + >>> compute_nums(1.1) + Traceback (most recent call last): + ... + ValueError: n must be an exact integer """ + if not isinstance(n, int): + raise ValueError("n must be an exact integer") + if n <= 0: + raise ValueError("n must be => 0") list_nums = [] for num in range(len(odd_composites)): i = 0 @@ -67,4 +83,4 @@ def compute_nums(n: int) -> List[int]: if __name__ == "__main__": - print(f"{compute_nums(2) = }") + print(f"{compute_nums(1) = }") From d41666f5bcf3a4530c8fdce0b3ff1a77c86d2997 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Fri, 21 Aug 2020 16:10:42 +0530 Subject: [PATCH 5/8] Update project_euler/problem_46/sol1.py Co-authored-by: Christian Clauss --- project_euler/problem_46/sol1.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/project_euler/problem_46/sol1.py b/project_euler/problem_46/sol1.py index 7177e1441f71..4c4bf438ab84 100644 --- a/project_euler/problem_46/sol1.py +++ b/project_euler/problem_46/sol1.py @@ -67,7 +67,8 @@ def compute_nums(n: int) -> List[int]: if not isinstance(n, int): raise ValueError("n must be an exact integer") if n <= 0: - raise ValueError("n must be => 0") + raise ValueError("n must be >= 0") + list_nums = [] for num in range(len(odd_composites)): i = 0 From 724503c91b02247b6a71103fcecb2238bb76541e Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Fri, 21 Aug 2020 16:10:54 +0530 Subject: [PATCH 6/8] Update project_euler/problem_46/sol1.py Co-authored-by: Christian Clauss --- project_euler/problem_46/sol1.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/project_euler/problem_46/sol1.py b/project_euler/problem_46/sol1.py index 4c4bf438ab84..dc202f96c721 100644 --- a/project_euler/problem_46/sol1.py +++ b/project_euler/problem_46/sol1.py @@ -62,7 +62,8 @@ def compute_nums(n: int) -> List[int]: >>> compute_nums(1.1) Traceback (most recent call last): ... - ValueError: n must be an exact integer + ValueError: n must be an integer + """ if not isinstance(n, int): raise ValueError("n must be an exact integer") From 361b8d29fc76ba449c13a238e9de17081610a086 Mon Sep 17 00:00:00 2001 From: Kushagra Bansal Date: Fri, 21 Aug 2020 16:40:12 +0530 Subject: [PATCH 7/8] Update sol1.py --- project_euler/problem_46/sol1.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_euler/problem_46/sol1.py b/project_euler/problem_46/sol1.py index dc202f96c721..716f9e8c7b83 100644 --- a/project_euler/problem_46/sol1.py +++ b/project_euler/problem_46/sol1.py @@ -54,7 +54,7 @@ def compute_nums(n: int) -> List[int]: >>> compute_nums(0) Traceback (most recent call last): ... - ValueError: n must be => 0 + ValueError: n must be >= 0 >>> compute_nums("a") Traceback (most recent call last): ... From 84db6de734903765b4ea41e8fbcc5c1628954791 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Fri, 21 Aug 2020 13:52:51 +0200 Subject: [PATCH 8/8] exact --- project_euler/problem_46/sol1.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project_euler/problem_46/sol1.py b/project_euler/problem_46/sol1.py index 716f9e8c7b83..761e9b8cc7fb 100644 --- a/project_euler/problem_46/sol1.py +++ b/project_euler/problem_46/sol1.py @@ -58,7 +58,7 @@ def compute_nums(n: int) -> List[int]: >>> compute_nums("a") Traceback (most recent call last): ... - ValueError: n must be an exact integer + ValueError: n must be an integer >>> compute_nums(1.1) Traceback (most recent call last): ... @@ -66,7 +66,7 @@ def compute_nums(n: int) -> List[int]: """ if not isinstance(n, int): - raise ValueError("n must be an exact integer") + raise ValueError("n must be an integer") if n <= 0: raise ValueError("n must be >= 0")