点击打开链接
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
int ye[7][7]; //可能出现的情况,用来存出现值得位置。
int circle , from;
int a ,b, n, f[52]={0,1,1};
void find(int a, int b)
{
memset(ye, 0, sizeof(ye));
ye[1][1]=1; //ye[f[i-1]][f[i]]出现的位置。
for(int i = 3; i<52; i++)
{
f[i]=(a*f[i-1]+b*f[i-2])%7;
if(ye[f[i-1]][f[i]]) //表示已经出现过了
{
circle=i-1-ye[f[i-1]][f[i]]; //循环节的长度
from = ye[f[i-1]][f[i]]; //循环节出现的位置
break;
}
ye[f[i-1]][f[i]]=i-1;
}
printf("%d\n",f[from+((n-from)%circle)]); //不要忘记前面没有出现循环的数。
}
int main()
{
while(~scanf("%d%d%d", &a, &b, &n)&&a+b+n!=0)
{
a=a%7;
b=b%7;
find(a, b);
}
return 0;
}