피보나치 수열은 보통 0 이상의 항에 대해서 다루고 있습니다.
형태의 점화식을 사용합니다. 음수항의 경우에도 그대로 적용될 수 있습니다.

사실 피보나치 수의 경우 일반적으로 푸는 방식은 차례대로 풀어나가는 것입니다. 최대항의 절대값이 백만정도이므로, 순차적으로 계산해도 크게 문제가 되지 않습니다. 알고리즘 효율은
제가 작성한 소스입니다. 소스는 참고용으로 봐주세요.
//--------------------------------------------------------------------
// baekjoon #1788 - Expansion of Fibonacci Series
// - by Aubrey Choi
// - created at 2019-07-06
//--------------------------------------------------------------------
#include <stdio.h>
#define MOD 1000000000
int main()
{
int f[2] = {0, 1}, n, ans, i;
scanf("%d", &n);
if(n >= 0)
{
for(i=1;i<=n/2; i++)
{
f[0]=(f[0]+f[1])%MOD;
f[1]=(f[0]+f[1])%MOD;
}
ans=f[n&1];
}
else
{
for(i=0,n=-n-1;i<=n/2;i++)
{
f[1]=(f[1]-f[0])%MOD;
f[0]=(f[0]-f[1])%MOD;
}
ans=f[(n+1)&1];
}
printf("%d\n%d\n", ans>0?1:ans<0?-1:0, ans>0?ans:-ans);
}
반응형
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #1790 수 이어쓰기 2(수학) (0) | 2022.10.22 |
---|---|
[C/C++] 백준 #1789 수열의 합(수학) (0) | 2022.10.22 |
[C/C++] 백준 #1786 찾기(KMP) (0) | 2022.10.21 |
[C/C++] 백준 #1780 종이의 개수(분할정복) (0) | 2022.10.20 |
[C/C++] 백준 #1769 3의 배수(구현) (5) | 2022.10.15 |
댓글