有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
给出A,B和N,求f(n)的值。
Input
输入3个数:A,B,N。数字之间用空格分割。(-10000 <= A, B <= 10000, 1 <= N <= 10^9)
Output
输出f(n)的值。
Input示例
3 -1 5
Output示例
6
#include <iostream>
#include <cstring>
using namespace std;
int f[300];
int A, B, N;
int main()
{
f[1] = 1;
f[2] = 1;
cin >> A >> B >> N;
f[3] = ((A * f[2] + B * f[1]) % 7 + 7) % 7;
if (N < 4)
{
cout << f[N] << endl;
return 0;
}
int len = 0;
for (int i = 4; i < 300; i++)
{
f[i] = ((A * f[i-1] + B * f[i-2]) % 7 + 7) % 7;
if (f[i] == f[3] && f[i-1] == f[2])
{
len = i - 3;
break;
}
}
int index = ((N - 2) % len) + 2;
cout << f[index] << endl;
return 0;
}