# Noah Badner, 2021
#
# Even Fibonacci numbers
# Problem 2
#
# 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
# even-valued terms.
# Solution: 4613732; Runtime: O(N)

def even_fibonacci_sum(n):
    """Returns the sum of all even numbers in the Fibonacci sequence below the given upper bound n"""
    even_fib_sum = 0
    term_1, term_2 = 1, 2
    while term_2 <= n:
        if term_2 % 2 == 0:
            even_fib_sum += term_2
        term_1, term_2 = term_2, term_1 + term_2
    return even_fib_sum


def main():
    """Main method"""
    print(even_fibonacci_sum(4000000))


if __name__ == "__main__":
    main()
