Language Comparison Euler Problem Two
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.
F#
let maxFibonacciNumber = 4000000
let FindTotal (numbers:int seq) =
numbers |> Seq.where (fun x -> x % 2 = 0) |> Seq.sum
let numbers =
Seq.unfold
(
fun state ->
let currentNumber, secondNumber = state
let nextNumber = currentNumber + secondNumber
match currentNumber with
| x when x > maxFibonacciNumber -> None
| _ -> Some(nextNumber, (secondNumber, nextNumber))
)(1,1)
FindTotal numbers
SQL
DECLARE @i INT
DECLARE @nMinusOne INT
DECLARE @nMinusTwo INT
DECLARE @total INT
SET @i = 1
SET @nMinusOne = 1
SET @nMinusTwo = 0
SET @total = 0
WHILE @i < 4000000
BEGIN
IF @i % 2 = 0
BEGIN
SET @total = @total + @i
END
SET @nMinusTwo = @nMinusOne
SET @nMinusOne = @i
SET @i = @nMinusOne + @nMinusTwo
END
PRINT @Total
C#
public static void Main()
{
var maxNumber = 4000000;
var result = GetFibonacci(maxNumber).Where (x=>x % 2 == 0).Sum();
Console.WriteLine(result);
}
static IEnumerable<int> GetFibonacci(int maxNumber)
{
var previousFibonacciNumber = 0;
var currentFibonacciNumber = 1;
while(currentFibonacciNumber < maxNumber)
{
yield return currentFibonacciNumber;
var temp = currentFibonacciNumber + previousFibonacciNumber;
previousFibonacciNumber = currentFibonacciNumber;
currentFibonacciNumber = temp;
}
}