Skip to content

Commit 33d8869

Browse files
committed
Add initial files for the euler project problem 127 solution.
1 parent 0c8cf8e commit 33d8869

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

Diff for: project_euler/problem_127/__init__.py

Whitespace-only changes.

Diff for: project_euler/problem_127/sol1.py

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
from numpy import sqrt
2+
3+
N = 120000
4+
5+
6+
def generate_primes(n: int):
7+
primes = [True] * (n + 1)
8+
primes[0] = primes[1] = False
9+
for i in range(2, int(sqrt(n + 1)) + 1):
10+
if primes[i]:
11+
j = i * i
12+
while j <= n:
13+
primes[j] = False
14+
j += i
15+
return primes
16+
17+
18+
def rad(n: int, primes_list: list[int]):
19+
f = 1
20+
for p in primes_list:
21+
if p > n:
22+
break
23+
if n % p == 0:
24+
f *= p
25+
return f
26+
27+
28+
def gcd(a: int, b: int):
29+
while b:
30+
a, b = b, a % b
31+
return a
32+
33+
34+
def solution(c_less: int = 120000) -> int:
35+
primes_bool = generate_primes(c_less)
36+
primes_list = []
37+
print("primes generated")
38+
for i in range(2, len(primes_bool)):
39+
if primes_bool[i]:
40+
primes_list += [i]
41+
42+
rads = [1] * (c_less + 1)
43+
for i in range(c_less + 1):
44+
if i % 100 == 0:
45+
print("rads", i)
46+
rads[i] = rad(i, primes_list)
47+
48+
sum_c = 0
49+
print("start main")
50+
for a in range(1, c_less):
51+
rad_a = rads[a]
52+
if a % 2 == 1:
53+
r = range(1, min(a, c_less - a))
54+
else:
55+
r = range(1, min(a, c_less - a), 2)
56+
for b in r:
57+
c = a + b
58+
if rad_a * rads[b] * rads[c] < c and gcd(rad_a, rads[b]) == 1:
59+
sum_c += c
60+
61+
return sum_c
62+
63+
64+
if __name__ == "__main__":
65+
print(f"{solution() = }")

0 commit comments

Comments
 (0)