From 3d35bcb76d0904c6c93368ada9880837a1f28778 Mon Sep 17 00:00:00 2001 From: felixm Date: Wed, 24 Apr 2024 21:39:34 -0400 Subject: [PATCH] Solve 204. --- python/e204.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 python/e204.py diff --git a/python/e204.py b/python/e204.py new file mode 100644 index 0000000..d4794e3 --- /dev/null +++ b/python/e204.py @@ -0,0 +1,38 @@ +from lib_prime import primes +from functools import lru_cache + + +@lru_cache +def next_prime(n): + if n == 1: + return 2 + ps = primes(105) + assert n < ps[-1] + for i, p in enumerate(ps): + if p == n and i + 1 < len(ps): + return ps[i + 1] + assert False + + +def count(current_product, max_product, current_prime, max_prime): + if current_product > max_product: + return 0 + r = 1 + + if current_prime > 1: + r += count(current_product * current_prime, max_product, current_prime, max_prime) + + while (current_prime := next_prime(current_prime)) <= max_prime: + r += count(current_product * current_prime, max_product, current_prime, max_prime) + return r + + +def euler_204(): + assert count(1, 10**8, 1, 5) == 1105 + return count(1, 10**9, 1, 100) + + +if __name__ == "__main__": + solution = euler_204() + print("e204.py: " + str(solution)) + assert(solution == 2944730)