Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
刚拿到此题,马上就想到了递归公式,但提交的时候,系统提示运行超时;
# include<iostream>
const int mod=10007;
int fibonaqie(int n)
{
if(n==1||n==2)
return 1;
else return ((fibonaqie(n-1)+fibonaqie(n-2))%mod);
}
using namespace std;
int main()
{
int n;
cin>>n;
cout<<fibonaqie(n);
return 0;
}
既然递归函数不行只能使用数组来计算,但n的只有不知道,那只能使用动态数组;
# include<iostream>
using namespace std;
const int mod=10007;
int main()
{
int n;
cin>>n;
int *f;
f=new int[n];
f[0]=f[1]=1;
if(n==1||n==2)
cout<<f[0];
else if(n>2)
{
int i;
for(i=2;i<n;i++)
f[i]=(f[i-1]+f[i-2])%mod;
cout<<f[i-1] ; }
delete []f;
return 0;
}