8
8
- if gcd(a, b) = 1 then gcd(a, c) = 1 and gcd(b, c) = 1
9
9
- rad(a*b*c) = rad(a) * rad(b) * rad(c), for gcd(a, b) = 1
10
10
- if a is even, b cannot b even for gcd(a, b) = 1 to be true.
11
+
12
+ >>> solution(1000)
13
+ 12523
11
14
"""
12
15
13
16
from numpy import sqrt
18
21
def generate_primes (n : int ) -> list [bool ]:
19
22
"""
20
23
Generates primes boolean array up to n.
24
+
25
+ >>> generate_primes(2)
26
+ [False, False, True]
27
+ >>> generate_primes(5)
28
+ [False, False, True, True, False, True]
21
29
"""
22
30
primes = [True ] * (n + 1 )
23
31
primes [0 ] = primes [1 ] = False
@@ -34,6 +42,11 @@ def rad(n: int, primes_list: list[int]) -> int:
34
42
"""
35
43
Calculated rad - product of unique prime factors for n, using prime numbers
36
44
list primes_list.
45
+
46
+ >>> rad(1, [1])
47
+ 1
48
+ >>> rad(12, [2, 3])
49
+ 6
37
50
"""
38
51
f = 1
39
52
for p in primes_list :
@@ -48,6 +61,10 @@ def gcd(a: int, b: int) -> int:
48
61
"""
49
62
Calculates greatest common divisor of a and b.
50
63
64
+ >>> gcd(1, 10)
65
+ 1
66
+ >>> gcd(14, 48)
67
+ 2
51
68
"""
52
69
while b :
53
70
a , b = b , a % b
@@ -58,6 +75,10 @@ def solution(c_less: int = 120000) -> int:
58
75
"""
59
76
Calculates all primes, rads, and then loops over a, b checking the conditions.
60
77
78
+ >>> solution(10)
79
+ 9
80
+ >>> solution(100)
81
+ 316
61
82
"""
62
83
primes_bool = generate_primes (c_less )
63
84
primes_list = []
@@ -67,8 +88,6 @@ def solution(c_less: int = 120000) -> int:
67
88
68
89
rads = [1 ] * (c_less + 1 )
69
90
for i in range (c_less + 1 ):
70
- if i % 100 == 0 :
71
- print ("rads" , i )
72
91
rads [i ] = rad (i , primes_list )
73
92
74
93
sum_c = 0
0 commit comments