思路来自:http://blog.sina.com.cn/s/blog_a16dd6d101014pjy.html
因为首先,任意一个数mod7结果为0到6这7个值,两个数就有7*7种组合
所以只要计算50此肯定会有个循环
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <cmath>
#include <sstream>
#include <vector>
using namespace std;
#define REP(i,a,b) for(int i=a;i<(int)b;i++)
#define REPD(i,a,b) for(int i=a;i>=(int)b;i--)
int f[50+5];
int main()
{
int a, b;
int n, i;
while(1)
{
memset(f, 0, sizeof(f));
scanf("%d%d%d", &a, &b, &n);
if(a==0 && b==0 && n == 0) break;
f[0] = f[1] = 1;
if(n == 1 || n ==2 )
{
printf("1\n");
continue;
}
for(i = 2; i<50; i++)
{
f[i] = (a * f[i-1] + b * f[i-2])% 7;
if(f[i-1] == 1 && f[i-2] == 1 && i != 2 ) break;
}
printf("%d\n",f[(n-1)%(i-2)]);
}
return 0;
}