@@ -47,18 +47,18 @@ def sum_primes(primes_degrees: dict[int, int], num: int) -> int:
4747 )
4848
4949
50- def generate_primes (num : int ) -> list [int ]:
50+ def generate_primes (max_num : int ) -> list [int ]:
5151 """
52- Calculates the list of primes up to and including `num `.
52+ Calculates the list of primes up to and including `max_num `.
5353
5454 >>> generate_primes(6)
5555 [2, 3, 5]
5656 """
57- are_primes = [True ] * (num + 1 )
57+ are_primes = [True ] * (max_num + 1 )
5858 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 ):
6060 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 ):
6262 are_primes [j ] = False
6363
6464 return [prime for prime , is_prime in enumerate (are_primes ) if is_prime ]
@@ -131,12 +131,11 @@ def solution(max_num: int = 1000000) -> int:
131131 12496
132132 """
133133
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 , {})
140139
141140 chain_start , _ = find_longest_chain (chain , max_num )
142141 return chain_start
0 commit comments