f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Sample Input
1 1 3 1 2 10 0 0 0
Sample Output
2 5
http://acm.hdu.edu.cn/showproblem.php?pid=1005
f(n-1): 0~7,f(n): 0~7 所以共49种组合
f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7 由递推公式可知最多49次循环就会从头开始循环,这是就可以不用继续执行了,然后将n对i取余,根据余数就可以得到结果。
代码如下:
#include<iostream>
using namespace std;
int f(int A, int B,int n)
{
if(n==1 || n==2)
return 1;
else
return (A*f(A,B,n-1)+B*f(A,B,n-2))%7;
}
int main()
{
int a,b,n;
while(cin>>a>>b>>n,a||b||n)
{
cout<<f(a,b,n%49)<<endl;
}
return 1;
}