Skip to content

Commit 2491095

Browse files
committed
Add documentation for the euler project problem 127 solution.
1 parent 33d8869 commit 2491095

File tree

1 file changed

+30
-5
lines changed

1 file changed

+30
-5
lines changed

Diff for: project_euler/problem_127/sol1.py

+30-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,24 @@
1+
"""
2+
Project Euler Problem 127: https://projecteuler.net/problem=127
3+
4+
abc-hits
5+
6+
It takes about 10 minutes to run.
7+
'Brute-force' solution that uses the following simplifications:
8+
- if gcd(a, b) = 1 then gcd(a, c) = 1 and gcd(b, c) = 1
9+
- rad(a*b*c) = rad(a) * rad(b) * rad(c), for gcd(a, b) = 1
10+
- if a is even, b cannot b even for gcd(a, b) = 1 to be true.
11+
"""
12+
113
from numpy import sqrt
214

315
N = 120000
416

517

6-
def generate_primes(n: int):
18+
def generate_primes(n: int) -> list[bool]:
19+
"""
20+
Generates primes boolean array up to n.
21+
"""
722
primes = [True] * (n + 1)
823
primes[0] = primes[1] = False
924
for i in range(2, int(sqrt(n + 1)) + 1):
@@ -15,7 +30,11 @@ def generate_primes(n: int):
1530
return primes
1631

1732

18-
def rad(n: int, primes_list: list[int]):
33+
def rad(n: int, primes_list: list[int]) -> int:
34+
"""
35+
Calculated rad - product of unique prime factors for n, using prime numbers
36+
list primes_list.
37+
"""
1938
f = 1
2039
for p in primes_list:
2140
if p > n:
@@ -25,16 +44,23 @@ def rad(n: int, primes_list: list[int]):
2544
return f
2645

2746

28-
def gcd(a: int, b: int):
47+
def gcd(a: int, b: int) -> int:
48+
"""
49+
Calculates greatest common divisor of a and b.
50+
51+
"""
2952
while b:
3053
a, b = b, a % b
3154
return a
3255

3356

3457
def solution(c_less: int = 120000) -> int:
58+
"""
59+
Calculates all primes, rads, and then loops over a, b checking the conditions.
60+
61+
"""
3562
primes_bool = generate_primes(c_less)
3663
primes_list = []
37-
print("primes generated")
3864
for i in range(2, len(primes_bool)):
3965
if primes_bool[i]:
4066
primes_list += [i]
@@ -46,7 +72,6 @@ def solution(c_less: int = 120000) -> int:
4672
rads[i] = rad(i, primes_list)
4773

4874
sum_c = 0
49-
print("start main")
5075
for a in range(1, c_less):
5176
rad_a = rads[a]
5277
if a % 2 == 1:

0 commit comments

Comments
 (0)