피보나치 수열 변형식의 N번째 값을 구하는 문제
이 문제 자체는 원래 1주일 전에 다 푼 상태였는데, 100번째 수열 값이 unsigned long long을 초과한다고 착각한 바람에 큰 수를 따로 만들어서 표현해야 할 지 고민하고 있던 문제였다.
#include <stdio.h>
unsigned long long P[100] = {1,1,1};
unsigned long long p(int N) {
if(N<=2) return P[N];
if(!P[N]) P[N]=p(N-2)+p(N-3);
return P[N];
}
int main() {
int N,T,i=0;
scanf("%d",&T);
for(;i<T;i++) {
scanf("%d",&N);
printf("%llu\n",p(N-1));
}
}
이제는 그런거 필요 없으니까 됐다.
사실 unsigned도 필요 없었다.
#include <stdio.h>
main(T, n, i) {
for (scanf("%d", &T); T; --T) {
long long a = 1, b = 1, c = 1, d = 1;
for (scanf("%d", &n); n > 3; --n) {
d = a + b; a = b; b = c; c = d;
}
printf("%lld\n", d); }
}