Skip to content

Commit 265ce55

Browse files
Update sol1.py
1 parent ad68f4c commit 265ce55

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

project_euler/problem_095/sol1.py

+18-18
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def generate_primes(max_prime: int) -> list[int]:
6767
def 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

119119
def 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

Comments
 (0)