A number sequence is defined as follows:
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Given A, B, and n, you are to calculate the value of f(n).
Input
The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 <= A, B <= 1000, 1 <= n <= 100,000,000). Three zeros signal the end of input and this test case is not to be processed.
Output
For each test case, print the value of f(n) on a single line.
Sample Input
1 1 3
1 2 10
0 0 0
1 2 10
0 0 0
Sample Output
2
5
5
分析:
计算可以发现这个函数是有规律可找的,是以49为一个周期的循环;
所以我们只需要将49个数打表出来,输出所求数除以49的余数所对应的值就可以了。
#include<iostream>
using namespace std;
const int maxn=;
int A,B,n,m,f[maxn]; int main()
{int i;
f[]=;f[]=;
cin>>A>>B>>n;
while(A!=||B!=||n!=)
{
for(i=;i<=;i++)
f[i]=(A*f[i-]+B*f[i-])%;
m=n%;
cout<<f[m]<<endl;
cin>>A>>B>>n;
}
return ;
}
说明:由于数据较大如果用递归的方法和会超时。