Problem :http://acm.hrbeu.edu.cn/index.php?act=problem&proid=5037
Code :
本题的解法非常精妙的运用a[i][j]=(a[i-1][j]+a[i-2][j])%j来保存Fibonacci余数,避免了大数运算及因Fibonacci过大而造成超时或溢出的问题。
Code :
1 #include<stdio.h>
2 int main()
3 {
4 int a[701][701];
5 for(int j=2;j<=700;j++)
6 {
7 a[0][j]=1;
8 a[1][j]=1;
9 for(int i=2;i<=700;i++)
10 a[i][j]=(a[i-1][j]+a[i-2][j])%j;
11 }
12 int n;
13 while(scanf("%d",&n)!=EOF)
14 {
15 while(n--)
16 {
17 int m;
18 scanf("%d",&m);
19 int count=0;
20 for(int i=2;i<=m;i++)
21 if(a[m][i]==0)
22 count++;
23 printf("%d\n",count);
24 }
25 }
26 return 0;
27 }
28
2 int main()
3 {
4 int a[701][701];
5 for(int j=2;j<=700;j++)
6 {
7 a[0][j]=1;
8 a[1][j]=1;
9 for(int i=2;i<=700;i++)
10 a[i][j]=(a[i-1][j]+a[i-2][j])%j;
11 }
12 int n;
13 while(scanf("%d",&n)!=EOF)
14 {
15 while(n--)
16 {
17 int m;
18 scanf("%d",&m);
19 int count=0;
20 for(int i=2;i<=m;i++)
21 if(a[m][i]==0)
22 count++;
23 printf("%d\n",count);
24 }
25 }
26 return 0;
27 }
28
本题的解法非常精妙的运用a[i][j]=(a[i-1][j]+a[i-2][j])%j来保存Fibonacci余数,避免了大数运算及因Fibonacci过大而造成超时或溢出的问题。