project euler problem 2 https projecteuler netproblem2 even fibonacci numbers each new term in the fibonacci sequence is generated by adding the previous two terms by starting with 1 and 2 the first 10 terms will be 1 2 3 5 8 13 21 34 55 89 by considering the terms in the fibonacci sequence whose values do not exceed four million find the sum of the evenvalued terms references https en wikipedia orgwikifibonaccinumber returns the sum of all even fibonacci sequence elements that are lower or equal to n solution10 10 solution15 10 solution2 2 solution1 0 solution34 44 solution3 4 2 solution0 traceback most recent call last valueerror parameter n must be greater than or equal to one solution17 traceback most recent call last valueerror parameter n must be greater than or equal to one solution traceback most recent call last typeerror parameter n must be int or castable to int solutionasd traceback most recent call last typeerror parameter n must be int or castable to int returns the sum of all even fibonacci sequence elements that are lower or equal to n solution 10 10 solution 15 10 solution 2 2 solution 1 0 solution 34 44 solution 3 4 2 solution 0 traceback most recent call last valueerror parameter n must be greater than or equal to one solution 17 traceback most recent call last valueerror parameter n must be greater than or equal to one solution traceback most recent call last typeerror parameter n must be int or castable to int solution asd traceback most recent call last typeerror parameter n must be int or castable to int
import math
from decimal import Decimal, getcontext


def solution(n: int = 4000000) -> int:
    

    try:
        n = int(n)
    except (TypeError, ValueError):
        raise TypeError("Parameter n must be int or castable to int.")
    if n <= 0:
        raise ValueError("Parameter n must be greater than or equal to one.")
    getcontext().prec = 100
    phi = (Decimal(5) ** Decimal(0.5) + 1) / Decimal(2)

    index = (math.floor(math.log(n * (phi + 2), phi) - 1) // 3) * 3 + 2
    num = Decimal(round(phi ** Decimal(index + 1))) / (phi + 2)
    total = num // 2
    return int(total)


if __name__ == "__main__":
    print(f"{solution() = }")