Fibonacci numbers
Time Limit: 1000 ms Case Time Limit: 1000 ms Memory Limit: 64 MB
Description
斐波那契数列应该是世界上最美的数列了,但是要是不算出它的前100000000项你就体会不到它的美丽,我们现在就要算出第N个Fibonacci数是多少
Input
输入包括多组数据,每行一个整数N(1 =< N <= 10^9),输入以0结束
Output
对应每组输出,请输出第N个Fibonacci数列的值,因为它可能非常大,输出它mod 10000的值
Sample Input
Original | Transformed |
4
63
12
78
0
Sample Output
Original | Transformed |
3
9842
144
1464
Source
Large的高精度 NO.1
——————————————————————分割线——————————————————————
思路:刚开始的时候,天真的开了一个十亿的数组,在函数外。但是很明显的,不允许。后来询问道,取模10000是个要点。斐波那契数列的尾数是有规律的。规律如下:
斐波那契数列的最后两位数是一个300步的循环,最后三位数是一个1500步的循环,最后四位数是一个15000步的循环,最后五位数是一个150000步的循环
每15000项有一个循环
每15000项有一个循环
代码如下:
1 #include <stdio.h>
2 int f[15000];
3 int main(){
4 f[0] = 1;
5 f[1] = 1;
6 int n, i;
7 for(i = 2; i < 20; i++)
8 f[i] = f[i-1] + f[i-2];
9 for(i = 20; i < 15000; i++)
10 f[i] = (f[i-1] + f[i-2]) % 10000;
11 while(scanf("%d", &n) != EOF&&n){
12 n--;
13 printf("%d\n", f[n%15000]);
14 }
15 return 0;
16 }