[C언어]프로젝트 오일러(Project Euler) 2. 피보나치 수열에서 4백만 이하이면서 짝수인 항의 합

문제

피보나치 수열의 각 항은 바로 앞의 항 두 개를 더한 것이 됩니다. 1과 2로 시작하는 경우 이 수열은 아래와 같습니다.짝수이면서 4백만 이하인 모든 항을 더하면 얼마가 됩니까?

코드

#include <stdio.h>

int main(void)
{
    int a1 = 0, a2 = 1, a3=0;    // 첫 번째, 일반항, 두 번째 일반항, 세 번째 일반항
    int sum=0;    //피보나치수열의 합을 누적할 변수

    while(a3<=4000000)
    {
        a3 = a1 + a2;
        a1 = a2;
        a2 = a3;
        if(a3%2==0)    //a3가 짝수이면
        sum += a3;    //짝수항을 누적하여 더한다
    }
    printf("%d\n", sum);

    return 0;
}

우선 초항과 둘 째항을 지정하여 $a1$에 $0$, $a2$에 $1$을 대입했다.

 

loop1)

$a3$에 $a1$과 $a2$를 더한 값을 대입하면 $1$이 되고,

$a2$의 값을 $a1$에 대입하면 $a1==1$이 된다.

$a3$의 값을 $a2$에 대입하면 $a2==1$이 된다.

 

loop2)

$a3$에 $a1$과 $a2$를 더한 값을 대입하면 $2$이 되고,

$a2$의 값을 $a1$에 대입하면 $a1==1$이 된다.

$a3$의 값을 $a2$에 대입하면 $a2==2$이 된다.

 

loop3)

$a3$에 $a1$과 $a2$를 더한 값을 대입하면 $3$이 되고,

$a2$의 값을 $a1$에 대입하면 $a1==2$이 된다.

$a3$의 값을 $a2$에 대입하면 $a2==3$이 된다.

 

이렇게 피보나치 수열이 이어지게 된다.

돌고돌긴 하지만 $a3$가 본래 피보나치수의 값을 가지므로 이런 방식을 택했다. $a1$, $a2$로 설정해도 결과는 같았다.

짝수를 판별해 sum에 누적하여 출력하면 정답을 얻을 수 있다.

 

정답:

더보기

4613732