|
25 | 25 | """ |
26 | 26 |
|
27 | 27 |
|
28 | | -def find_primes(n: int) -> list[int]: |
| 28 | +def find_primes(limit: int) -> list[int]: |
29 | 29 | """ |
30 | | - Returns a list of all primes less than or equal to n |
| 30 | + Returns a list of all primes less than or equal to 'limit' |
31 | 31 | >>> find_primes(19) |
32 | 32 | [2, 3, 5, 7, 11, 13, 17, 19] |
33 | 33 | """ |
34 | | - sieve = [True] * (n + 1) |
| 34 | + sieve = [True] * (limit + 1) |
35 | 35 |
|
36 | | - for i in range(2, n + 1): |
37 | | - for j in range(2 * i, n + 1, i): |
| 36 | + for i in range(2, limit + 1): |
| 37 | + for j in range(2 * i, limit + 1, i): |
38 | 38 | sieve[j] = False |
39 | | - return [i for i in range(2, n + 1) if sieve[i]] |
| 39 | + return [i for i in range(2, limit + 1) if sieve[i]] |
40 | 40 |
|
41 | 41 |
|
42 | | -def find_prime_factorizations(n: int) -> list[dict[int, int]]: |
| 42 | +def find_prime_factorizations(limit: int) -> list[dict[int, int]]: |
43 | 43 | """ |
44 | 44 | Returns a list of prime factorizations of 2...n, with prime |
45 | 45 | factorization represented as a dictionary of (prime, exponent) pairs |
46 | 46 | >>> find_prime_factorizations(7) |
47 | 47 | [{}, {}, {2: 1}, {3: 1}, {2: 2}, {5: 1}, {2: 1, 3: 1}, {7: 1}] |
48 | 48 | """ |
49 | | - primes = find_primes(n) |
50 | | - prime_factorizations = [{} for _ in range(n + 1)] |
| 49 | + primes = find_primes(limit) |
| 50 | + prime_factorizations = [{} for _ in range(limit + 1)] |
51 | 51 |
|
52 | 52 | for p in primes: |
53 | | - for j in range(p, n + 1, p): |
| 53 | + for j in range(p, limit + 1, p): |
54 | 54 | j_factorization = prime_factorizations[j] |
55 | 55 | x = j |
56 | 56 | while x % p == 0: |
@@ -82,11 +82,9 @@ def solution(target: int = 1000) -> int: |
82 | 82 | upper_bound = 210 ** ((int((2 * target - 1) ** 0.25) + 1) // 2) |
83 | 83 | prime_factorizations = find_prime_factorizations(upper_bound) |
84 | 84 |
|
85 | | - def num_solutions(n): |
86 | | - return (num_divisors_of_square(prime_factorizations[n]) // 2) + 1 |
87 | | - |
88 | 85 | for i in range(2, upper_bound + 1): |
89 | | - if num_solutions(i) > target: |
| 86 | + num_solutions = (num_divisors_of_square(prime_factorizations[i]) // 2) + 1 |
| 87 | + if num_solutions > target: |
90 | 88 | return i |
91 | 89 |
|
92 | 90 |
|
|
0 commit comments