""" Sum of primes below 2 million """ import time def timer(func): def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) end = time.time() print(f"{func.__name__} took {end - start:.6f} seconds") return result return wrapper def sieve_primes(max: int) -> list[int]: primes = [True] * (max + 1) primes[0:2] = [False, False] for i in range(2, max + 1): if primes[i]: primes[i * i : max : i] = [False] * ((max - 1 - i * i) // i + 1) return [i for i in range(max) if primes[i]] @timer def sum_primes(max: int) -> int: return sum(sieve_primes(max)) if __name__ == "__main__": print(sum_primes(2_000_000))