@@ -67,7 +67,7 @@ def generate_primes(max_prime: int) -> list[int]:
67
67
def multiply (
68
68
chain : list [int ],
69
69
primes : list [int ],
70
- min_prime : int ,
70
+ min_prime_idx : int ,
71
71
prev_num : int ,
72
72
max_num : int ,
73
73
prev_sum : int ,
@@ -81,7 +81,7 @@ def multiply(
81
81
>>> multiply(
82
82
... chain=chain,
83
83
... primes=[2],
84
- ... min_prime=2 ,
84
+ ... min_prime_idx=0 ,
85
85
... prev_num=1,
86
86
... max_num=2,
87
87
... prev_sum=0,
@@ -93,27 +93,27 @@ def multiply(
93
93
{2: 1}
94
94
"""
95
95
96
+ min_prime = primes [min_prime_idx ]
96
97
num = prev_num * min_prime
97
98
primes_degrees [min_prime ] = primes_degrees .get (min_prime , 0 ) + 1
98
99
if prev_num % min_prime != 0 :
99
100
new_sum = prev_sum * (min_prime + 1 ) + prev_num
100
101
else :
101
102
new_sum = sum_primes (primes_degrees = primes_degrees , num = num )
102
103
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
+ )
117
117
118
118
119
119
def find_longest_chain (chain : list [int ], max_num : int ) -> int :
@@ -155,14 +155,14 @@ def solution(max_num: int = 1000000) -> int:
155
155
156
156
primes = generate_primes (max_num )
157
157
chain = [0 ] * (max_num + 1 )
158
- for prime in primes :
158
+ for prime_idx , prime in enumerate ( primes ) :
159
159
if prime ** 2 > max_num :
160
160
break
161
161
162
162
multiply (
163
163
chain = chain ,
164
164
primes = primes ,
165
- min_prime = prime ,
165
+ min_prime_idx = prime_idx ,
166
166
prev_num = 1 ,
167
167
max_num = max_num ,
168
168
prev_sum = 0 ,
0 commit comments