File tree 2 files changed +65
-0
lines changed
project_euler/problem_127
2 files changed +65
-0
lines changed Original file line number Diff line number Diff line change
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 () = } " )
You can’t perform that action at this time.
0 commit comments