문제
피보나치 수열의 각 항은 바로 앞의 항 두 개를 더한 것이 됩니다. 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