""" Project Euler Problem 10: https://projecteuler.net/problem=10 Summation of primes The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. Find the sum of all the primes below two million. References: - https://en.wikipedia.org/wiki/Prime_number """ from itertools import takewhile from typing import Iterator from maths.prime_check import prime_check def prime_generator() -> Iterator[int]: """ Generate a list sequence of prime numbers """ num = 2 while True: if prime_check(num): yield num num += 1 def solution(n: int = 2000000) -> int: """ Returns the sum of all the primes below n. >>> solution(1000) 76127 >>> solution(5000) 1548136 >>> solution(10000) 5736396 >>> solution(7) 10 """ return sum(takewhile(lambda x: x < n, prime_generator())) if __name__ == "__main__": print(f"{solution() = }")