1 #include<stdio.h> 2 #define N 1000000 3 int main() 4 { 5 int f[N],n,i,t=0; 6 7 scanf("%d",&n); 8 9 f[0]=f[1]=1; 10 11 for(i=2;i<n;i++) 12 { 13 f[i]=(f[i-1]+f[i-2])%10007; 14 } 15 16 printf("%d\n",f[n-1]); 17 18 return 0; 19 }
1 #include<stdio.h> 2 int dg(int n) 3 { 4 int s; 5 if(n==0||n==1) s=1; 6 else 7 return s=dg(n-1)+dg(n-2); 8 return s; 9 } 10 int main() 11 { 12 unsigned long s=0,a=dg(21),b=dg(22),i,n; 13 14 scanf("%d",&n); 15 16 if(n<20) printf("%d\n",dg(n-1)); 17 18 else 19 { 20 for(i=23;i<n;i++) 21 { 22 s=(a+b)%10007; 23 a=b; 24 b=s;//这里将余数直接加进去减少了运算量,因为没有被算进去的一定不到10007的倍数,所以只计算余数不影响。 25 } 26 printf("%d\n",s); 27 } 28 29 30 return 0; 31 }
原文:https://www.cnblogs.com/yuanqingwen/p/10457496.html