http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1126
http://acm.hdu.edu.cn/showproblem.php?pid=1005
注意上面一题和下面一题的区别,上面A,B可能取负数,但是mod跟c++中%是不一样的,mod只会得到非负数,两次跳进这个坑了.
然后就找周期,只要f[i-1]==1&&f[i]==1就可以跳出,然后i-2就是周期,输出n%(i-2)的时候,要注意如果等于0的话,其实n是等于i-2,所以要输出f[i-2]。
还有难道循环节一定是从1 1 开始的??
1 #include<cstdio> 2 int f[100]; 3 int main() 4 { 5 //freopen("a.txt","r",stdin); 6 int a,b,n,i; 7 f[1]=f[2]=1; 8 while(~scanf("%d %d %d",&a,&b,&n)) 9 { 10 if(a==0&&b==0&&n==0) break; 11 for(i=3;i<100;i++) 12 { 13 f[i]=((a*f[i-1]+b*f[i-2])%7+7)%7; 14 // printf("%I64d ",f[i]); 15 if(f[i]==1&&f[i-1]==1) break; 16 } 17 f[0]=f[i-2]; 18 printf("%d ",f[n%(i-2)]); 19 } 20 return 0; 21 }