题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1005
f[i]=(A*f[i-1]+B*f[i-2]) mod 7
如果f[i]==f[j] && f[i+1]==f[j+1] (i<j)
则对n>=i时f(n)以j-i为周期循环
显然对所有n有0<=f[n]<7
∴f[n-1],f[n]的组合最多有49种
∴必能找到f[i]==f[50] && f[i+1]==f[51] (0<i<50)
∴……
#include<iostream>
using namespace std;
int main()
{
int a,b,n,f[60];
while(cin>>a>>b>>n && a)
{
a%=7;
b%=7;
f[1]=f[2]=1;
if(n<55)
{
for(int i=3;i<=n;i++) f[i]=(a*f[i-1]+b*f[i-2])%7;
cout<<f[n]<<endl;
}
else
{
for(int i=3;i<=51;i++) f[i]=(a*f[i-1]+b*f[i-2])%7;
int p=50;
while(--p)
{
if(f[p]==f[50] && f[p+1]==f[51]) break;
}
int t=50-p;
n=(n-50)%t;
cout<<f[p+n]<<endl;
}
}
return 0;
}