p0002_s0.py

problem 2 · 30 lines

#!/usr/bin/env python3.14
# -*- coding: utf-8 -*-
""" Solution to Euler Problem 2: Even Fibonacci Numbers [Level 0]. """
from __future__ import annotations

import typing

from solver.runners import runner


@runner.main
def solve(*args: str) -> str:
    """Sum the even Fibonacci numbers below max_limit using the closed recurrence
    E(k+1) = 4*E(k) + E(k-1) on even terms only (every third Fibonacci term is
    even); O(log max_limit) time, O(1) space."""
    max_limit = runner.parse_int(args[0])

    def _even_fibonacci_numbers() -> typing.Generator[int, None, None]:
        """Yield successive even Fibonacci numbers below max_limit."""
        even_fib_a, even_fib_b = (2, 8)
        while even_fib_a < max_limit:
            yield even_fib_a
            even_fib_a, even_fib_b = (even_fib_b, 4 * even_fib_b + even_fib_a)

    return str(sum(_even_fibonacci_numbers()))


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