@@ -47,18 +47,18 @@ def sum_primes(primes_degrees: dict[int, int], num: int) -> int:
47
47
)
48
48
49
49
50
- def generate_primes (num : int ) -> list [int ]:
50
+ def generate_primes (max_num : int ) -> list [int ]:
51
51
"""
52
- Calculates the list of primes up to and including `num `.
52
+ Calculates the list of primes up to and including `max_num `.
53
53
54
54
>>> generate_primes(6)
55
55
[2, 3, 5]
56
56
"""
57
- are_primes = [True ] * (num + 1 )
57
+ are_primes = [True ] * (max_num + 1 )
58
58
are_primes [0 ] = are_primes [1 ] = False
59
- for i in range (2 , isqrt (num ) + 1 ):
59
+ for i in range (2 , isqrt (max_num ) + 1 ):
60
60
if are_primes [i ]:
61
- for j in range (i * i , num + 1 , i ):
61
+ for j in range (i * i , max_num + 1 , i ):
62
62
are_primes [j ] = False
63
63
64
64
return [prime for prime , is_prime in enumerate (are_primes ) if is_prime ]
@@ -131,12 +131,11 @@ def solution(max_num: int = 1000000) -> int:
131
131
12496
132
132
"""
133
133
134
- primes = generate_primes (max_num )
135
- chain = [0 ] * (max_num + 1 )
136
- for p in primes :
137
- if p * p > max_num :
138
- break
139
- multiply (chain , primes , p , 1 , max_num , 0 , {})
134
+ isqrt_max_num = isqrt (max_num )
135
+ primes = generate_primes (isqrt_max_num )
136
+ chain = [0 ] * (isqrt_max_num + 1 )
137
+ for prime in primes :
138
+ multiply (chain , primes , prime , 1 , max_num , 0 , {})
140
139
141
140
chain_start , _ = find_longest_chain (chain , max_num )
142
141
return chain_start
0 commit comments