题目出处:点击打开链接
因为f[n]=(a*f[n-1]+b*f[n-2])%7的结果只能为0,1,2,3,4,5,6中的一个,同理f[n-1],f[n-2]也一样,所以最多有7*7个变化,即周期最长为7*7,所以只要找到周期然后取余就可以了。。。
下面为AC代码:
#include <stdio.h>
int main()
{
int a,b,n,f[100],i;
f[1]=f[2]=1;
while(scanf("%d %d %d",&a,&b,&n)!=EOF)
{
if(a==0 && b==0 && n==0) break;
if(n>=3)
{
for(i=3;i<100;i++)
{
f[i]=(a*f[i-1]+b*f[i-2])%7;
if(f[i-1]==1 && f[i]==1) break;
}
i-=2;
n%=i;
if(n==0) n=i;
printf("%d\n",f[n]);
}
else if(n==1 || n==2)
printf("1\n");
}
return 0;
}