"血をもって書け。そうすればあなたは、血が精神だということを経験するだろう。"

Problem2

フィボナッチ数列の項は前の2つの項の和である。最初の2項を 1, 2 とすれば、最初の10項は以下の通りである。

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

数列の項が400万を超えない範囲で、偶数の項の総和を求めよ。

Haskell

main=print $ sum $ filter even $ tail $ fib [1,1]
fib::[Integer]->[Integer]
fib xs=if ((head xs) > 4000000) then xs else (fib $ stretch xs)
stretch::[Integer]->[Integer]
stretch xs = sum (take 2 xs):xs

C

#include <stdio.h>
int main(void){
  int i1=1,i2=1,i3,sum=0;
  while(1){
    i3=i1+i2;
    i1=i2;
    i2=i3;
    if(!(i1 & 1)){sum+=i1;}
    if(i1>4000000){break;}
  }
  printf("%d\n",sum);
}

境界があやしいかも。一応結果は4613732