p0010_s3.py

problem 10 · 35 lines

#!/usr/bin/env python3.14
# -*- coding: utf-8 -*-
""" Solution to Euler Problem 10: Summation of Primes [Level 0]. """
from __future__ import annotations

from solver.runners import runner


def is_prime(num: int) -> bool:
    """Test primality by trial division of odd divisors up to sqrt(num)."""
    if num < 2:
        return False
    if num == 2:
        return True
    if num % 2 == 0:
        return False
    i = 3
    while i * i <= num:
        if num % i == 0:
            return False
        i += 2
    return True


@runner.main
def solve(*args: str) -> str:
    """Sum primes below max_num by trial-division primality test on each candidate; O(n*sqrt(n)/log n)."""
    max_num = runner.parse_int(args[0])

    return str(sum((n for n in range(2, max_num) if is_prime(n))))


if __name__ == "__main__":
    raise SystemExit(solve())