#include<stdio.h>//若用递归函数实现应该怎么操作
int main()
{
int a,b,n,i,d,k;
int s[51]={0,1,1};//定义长度为51,s[0],s[1],s[2]分别为0,1,1的数组
while(scanf("%d%d%d",&a,&b,&n)!=EOF&&a+b+n)
{
for(i=3;i<52;i++)
s[i]=(a*s[i-1]+b*s[i-2])%7;//对7取余共有0到6这7种情况,a和b固定值,相乘再相加最多49种情况
for(i=3;i<52;i++)//最迟从50开始出现循环节
{
if(s[i]==s[1]&&s[i+1]==s[2])
break;
}
//printf("%d\n",n);
//printf("%d\n",i);
if(n<i)//i和1的s值相同
printf("%d\n",s[n]);
else
{
k=n;//用k来替换n,避免因改变原本输入数据而造成不必要的麻烦
d=n/(i-1);//i-1为循环长度
k-=d*(i-1);
printf("%d\n",s[k]);
}
}
} http://acm.hdu.edu.cn/showproblem.php?pid=1005
11-20
3974
07-26