#include<iostream>
using namespace std;
#define N 10000
int main()
{
	int A,B,n;
	cin>>A>>B>>n;
	n=n%49;
	while(!(A==0&&B==0&&n==0))
	{
		long long int a[N];
		a[1]=1;
		a[2]=1;
		if(n==1||n==2)
		{
			cout<<1<<endl;
		}
		else
		{
			for(int i=3;i<=n;i++)
			{
				a[i]=(A*a[i-1]+B*a[i-2])%7;
			}
			cout<<a[n]<<endl;
		}
		cin>>A>>B>>n;
		n=n%49;
	}
	return 0;
 } 
由于f(n)是由前两个数字组合产生,那么只要有两个数字组合相同的情况发生就一定一会产生循环!
两个数字的组合的最大可能值为7x7=49,因此只要在调用迭代方法中限制n的在0~48就可以了
原文:http://www.cnblogs.com/97-ly/p/6818669.html