参考:https://blog.csdn.net/u014174811/article/details/41598267
谢谢原博主的思路
这道题乍一看,嘿真tm简单
递归就好了
然后嗯……………………,编译器运行成功,oj上一直不给ac
想了半天也没相出啥结果了,
后来上csdn上查了下
才知道这题是有规律可循的
直接上代码
#include<stdio.h>
int main()
{
int a,b,n;
while(scanf("%d%d%d",&a,&b,&n)&&((a!=0)||(b!=0)||(n!=0)))
{
int f[50];
f[1]=1;
f[2]=1;
if(n>2)
{
int i,H;
for(i=3;i<=49;i++)
{
f[i]=(a*f[i-1]+b*f[i-2])%7;
}
H=f[n%49];//然后我发现了一个可怕的东西,我把49改成48,尽然也能ac
printf("%d\n",H);
}
else if(n==1)
{
printf("%d\n",f[1]);
}
else if(n==2)
{
printf("%d\n",f[2]);
}
}
}
这里 mod7 总共就是7种情况 0 1 2 3 4 5 6
f(n)的取值只与a,b,f(n-1),f(n-2)有关,a,b是参数,不需要考虑,
只考虑f(n-1),f(n-2)
又因为每个f(n)的值都在 0 1 2 3 4 5 6之间
所以f(n-1),f(n-2)之间只有7*7=49种
所以数组f(n)每49个数必定有循环
注:我把代码里的49改成48尽然也能ac,我很迷呀!!!