Project Euler/2
From charlesreid1
Project 2 on Project Euler: https://projecteuler.net/problem=2
Solution: https://git.charlesreid1.com/cs/euler/src/master/002
Sum of even Fibonacci numbers smaller than 4 million.
Note that this does not mean the even-number-indexed Fibonacci numbers 2, 4, 6, etc., but actually the Fibonacci numbers that are themselves even.
The solution
This is an interesting problem because it requires generating a very large number of Fibonacci numbers.
Ironically, because most computer science courses introduce recursion using the example of Fibonacci, and how tremendously inefficient it is to implement recursively, when you ask a programmer to implement the Fibonacci sequence, they typically implement a recursive version.
There are a couple of ways to do it more efficiently, the most obvious being a for loop or a while loop. I used a while loop.
//Integer MAX = 10; Integer SUM = 0; // Fencepost Integer F_km2 = 1; // k = 1 Integer F_km1 = 2; // k = 2 Integer F_k = 3; Integer k = 3; SUM += 2; // <-- this was the trick to the problem. while(F_k < MAX) { // <-- make sure less than 4 million k++; F_km2 = F_km1; F_km1 = F_k; F_k = F_km2 + F_km1; if(F_k%2==0) { SUM += F_k; } }
The generalization
A function to compute very large Fibonacci numbers is useful to have. 4 million does not push the number past normal 32-bit representations, but it's a good exercise to implement this using the BigInteeger type in Java or some other big number library.
Project Euler project euler notes
Round 1: Problems 1-20 Problem 1 · Problem 2 · Problem 3 · Problem 4 · Problem 5 · Problem 6 · Problem 7 · Problem 8 · Problem 9 · Problem 10 Problem 11 · Problem 12 · Problem 13 · Problem 14 · Problem 15 · Problem 16 · Problem 17 · Problem 18 · Problem 19 · Problem 20 Round 2: Problems 50-70 Problem 51 · Problem 52 · Problem 53 · Problem 54 · Problem 55 · Problem 56 · Problem 57 · Problem 58 · ... · Problem 61 · Problem 62 · Problem 63 · Problem 64 · Problem 65 · Problem 66 · Problem 67 Round 3: Problems 100-110 Problem 100 · Problem 101 · Problem 102 Round 4: Problems 500-510 Problem 500 · Problem 501 * · Problem 502 * Round 5: Problems 150-160 Round 6: Problems 250-260 Round 7: Problems 170-180
|