由于n值非常大,逐个计算到f(n)肯定会超时。mod7容易想到会有规律可寻。
因为mod7的关系,而且f(1)=f(2)=1,所以f(n)的值是循环分布的,而且一定会
回到f(n-1)=f(n)=1,[n-1]和f[n-2]的这两个数的组合一共有7*7=49可能
(就是两个数字的组合,每个数有7种可能,比如0和1,6和5,4和2)因为相邻连个f只有7种取值。
所以,只要找出循环因子即可,寻找方法正是根据f(n-1)=f(n)再次出现的地方来计算
#include<stdio.h>
int main()
{
int i,a,b,n;
int f[49];
while(scanf("%d %d%d",&a,&b,&n),a||b||n)
{
f[1]=1;f[2]=1;
for(i=3;i<=49;i++)
{
f[i]=(a*f[i-1]+b*f[i-2])%7;
}
if(nI==0)
else printf("%d\n",f[nI]);
}
}