題目出處:點擊打開鏈接
因爲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;
}