@@ -67,7 +67,7 @@ def generate_primes(max_prime: int) -> list[int]:
6767def multiply (
6868 chain : list [int ],
6969 primes : list [int ],
70- min_prime : int ,
70+ min_prime_idx : int ,
7171 prev_num : int ,
7272 max_num : int ,
7373 prev_sum : int ,
@@ -81,7 +81,7 @@ def multiply(
8181 >>> multiply(
8282 ... chain=chain,
8383 ... primes=[2],
84- ... min_prime=2 ,
84+ ... min_prime_idx=0 ,
8585 ... prev_num=1,
8686 ... max_num=2,
8787 ... prev_sum=0,
@@ -93,27 +93,27 @@ def multiply(
9393 {2: 1}
9494 """
9595
96+ min_prime = primes [min_prime_idx ]
9697 num = prev_num * min_prime
9798 primes_degrees [min_prime ] = primes_degrees .get (min_prime , 0 ) + 1
9899 if prev_num % min_prime != 0 :
99100 new_sum = prev_sum * (min_prime + 1 ) + prev_num
100101 else :
101102 new_sum = sum_primes (primes_degrees = primes_degrees , num = num )
102103 chain [num ] = new_sum
103- for prime in primes :
104- if prime >= min_prime :
105- num_n = prime * num
106- if num_n > max_num :
107- break
108- multiply (
109- chain = chain ,
110- primes = primes ,
111- min_prime = prime ,
112- prev_num = num ,
113- max_num = max_num ,
114- prev_sum = new_sum ,
115- primes_degrees = primes_degrees .copy (),
116- )
104+ for prime_idx in range (min_prime_idx , len (primes )):
105+ num_n = primes [prime_idx ] * num
106+ if num_n > max_num :
107+ break
108+ multiply (
109+ chain = chain ,
110+ primes = primes ,
111+ min_prime_idx = prime_idx ,
112+ prev_num = num ,
113+ max_num = max_num ,
114+ prev_sum = new_sum ,
115+ primes_degrees = primes_degrees .copy (),
116+ )
117117
118118
119119def find_longest_chain (chain : list [int ], max_num : int ) -> int :
@@ -155,14 +155,14 @@ def solution(max_num: int = 1000000) -> int:
155155
156156 primes = generate_primes (max_num )
157157 chain = [0 ] * (max_num + 1 )
158- for prime in primes :
158+ for prime_idx , prime in enumerate ( primes ) :
159159 if prime ** 2 > max_num :
160160 break
161161
162162 multiply (
163163 chain = chain ,
164164 primes = primes ,
165- min_prime = prime ,
165+ min_prime_idx = prime_idx ,
166166 prev_num = 1 ,
167167 max_num = max_num ,
168168 prev_sum = 0 ,
0 commit comments