p0002_s0.c

problem 2 · 22 lines

/* Solution to Euler Problem 2: Even Fibonacci Numbers. */
#include "runner.h"

/* Sum the even Fibonacci numbers below max_limit via the even-term recurrence
   E(k+1) = 4*E(k) + E(k-1) (every third Fibonacci term is even); O(log max_limit)
   time, O(1) space. */
const char *solve(int argc, char *argv[]) {
    static char _answer[32];
    long long max_limit = parse_int(argv[1]);
    long long even_fib_a = 2, even_fib_b = 8;
    long long total = 0;

    while (even_fib_a < max_limit) {
        total += even_fib_a;
        long long next = 4 * even_fib_b + even_fib_a;
        even_fib_a = even_fib_b;
        even_fib_b = next;
    }

    { snprintf(_answer, sizeof _answer, "%lld", (long long)(total)); return _answer; }
}