1126 求递推序列的第N项(51nod)
原题链接http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1126
这题我们应该先求出他的周期来。。。。。
for(i=3;i<300;i++) { f[i]=((A*f[i-1]+B*f[i-2])%7+7)%7; if(f[i-1]==1&&f[i]==1) break; }当f[i-1]==1&&f[i]==1时相当于又回到了开始,所以i-2就是他的周期
这里要注意当n%(i-2)==0时。。。f[0]=f[i-2],即n==i-2;
#include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> using namespace std; const int maxn=1000; int f[maxn]; int main() { int A,B,n; while(scanf("%d %d %d",&A,&B,&n)!=EOF) { memset(f,0,sizeof(f)); if(n==1||n==2) { printf("1\n"); continue; } f[1]=1;f[2]=1; int i; for(i=3;i<300;i++) { f[i]=((A*f[i-1]+B*f[i-2])%7+7)%7; if(f[i-1]==1&&f[i]==1) break; } f[0]=f[i-2]; printf("%d\n",f[n%(i-2)]); } return 0; }