@@ -69,29 +69,35 @@ def multiply(
69
69
primes : list [int ],
70
70
prime : int ,
71
71
prev_n : int ,
72
- n_max : int ,
72
+ max_num : int ,
73
73
prev_sum : int ,
74
- primes_d : dict [int , int ],
74
+ primes_degrees : dict [int , int ],
75
75
) -> None :
76
76
"""
77
77
Run over all prime combinations to generate non-prime numbers.
78
78
79
- >>> multiply([None] * 3, [2], 2, 1, 2, 0, {})
79
+ >>> chain = [0] * 3
80
+ >>> primes_degrees = {}
81
+ >>> multiply(chain=chain, primes=[2], prime=2, prev_n=1, max_num=2, prev_sum=0, primes_degrees=primes_degrees)
82
+ >>> chain
83
+ [0, 0, 0]
84
+ >>> primes_degrees
85
+ {}
80
86
"""
81
87
82
- number = prev_n * prime
88
+ num = prev_n * prime
83
89
primes_d [prime ] = primes_d .get (prime , 0 ) + 1
84
90
if prev_n % prime != 0 :
85
91
new_sum = prev_sum * (prime + 1 ) + prev_n
86
92
else :
87
- new_sum = sum_primes (primes_d , number )
88
- chain [number ] = new_sum
93
+ new_sum = sum_primes (primes_d , num )
94
+ chain [num ] = new_sum
89
95
for p in primes :
90
96
if p >= prime :
91
97
number_n = p * number
92
- if number_n > n_max :
98
+ if number_n > max_num :
93
99
break
94
- multiply (chain , primes , p , number , n_max , new_sum , primes_d .copy ())
100
+ multiply (chain = chain , primes = primes , prime = p , prev_n = num , max_num = max_num , prev_sum = new_sum , primes_degrees = primes_degrees .copy ())
95
101
96
102
97
103
def find_longest_chain (chain : list [int ], max_num : int ) -> int :
@@ -137,7 +143,7 @@ def solution(max_num: int = 1000000) -> int:
137
143
if prime ** 2 > max_num :
138
144
break
139
145
140
- multiply (chain , primes , prime , 1 , max_num , 0 , {})
146
+ multiply (chain = chain , primes = primes , prime = prime , prev_n = 1 , max_num = max_num , prev_sum = 0 , primes_degrees = {})
141
147
142
148
return find_longest_chain (chain , max_num )
143
149
0 commit comments