Finding Even Fibonacci Numbers Below a Threshold

David Vermillion
2 min readDec 27, 2020
Fibonacci staircase to illustrate the topic
Fibonacci staircase at St John’s College, Cambridge, UK, Flickr

The Problem

It’s time for the second Project Euler problem set! The problem requires finding the even Fibonacci Sequence numbers below 4,000,000. I calculated the sum of the Fibonacci sequence using this formula:

Technically, the formula for the sequence is slightly different, but the above formula gives you an idea of how to think about summing the sequence.

The Method

Loops are a coding fundamental, but not one that I am completely comfortable with yet. Part of my reasoning for using Project Euler is to improve my comfort with loops.

I start by clearing the workspace and initializing my variables for calculation. I then use a while loop. The loop continues until either the entry size exceeds the limit, or the vector length exceeds that same limit. I append the vector on each loop and increment the counter for the next loop. I then show the vector ( x) for visual inspection.

This vector contains the entire Fibonacci Sequence up to the limit of 4 million, not merely the even entries, so I have to clean it up. I do this by creating a logical vector where each entry of the vector x is divided by two. If the modulo is 0, it returns TRUE, else FALSE. I then feed this vector back into x to create another vector, which I then sum to find the answer.

Ideally, I’d like to include the operation checking for even entries inside the while loop. However, my attempts resulted in a non-functioning code-chunk. The version I described above ran in 0.1799641 seconds between clearing the variables and finding the result. The version with an extra if statement ran for over a minute and still hadn’t completed when I aborted it.

I am open to suggestions to improve the code. Please comment below if you have an idea for optimization!

You can find the R file here. The code below is the minimum required to run as described above:

rm() 
N <- 4e6
x <- c(1, 2)
i <- 2
while (x[i] < N) {
if (x[i]+x[i-1] > N) break
x <- c(x, x[i]+x[i-1])
i <- i+1
}
x e <- x%%2 == 0
a <- x[e]
sum(a)

Originally published at https://davidmvermillion.com on December 27, 2020.

--

--

David Vermillion

Telling stories with data to accomplish mission objectives, improve outcomes, increase efficiencies, and boost profitability