求递推序列的第N项
有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
给出A,B和N,求f(n)的值。
3 -1 5
6
思路:
如果不知道循环点,或者循环点在中间的某个位置,那么我们就要存储,查找循环节。
代码如下:
#include<iostream> #include<cmath> #include<cstdio> using namespace std; int A,B,N; int a[10010],i; int main() { scanf("%d%d%d",&A,&B,&N); a[1] = 1; a[2] = 1; for( i=3;i<10010;i++) { a[i] = ((a[i-1]*A + B*a[i-2])%7+7)%7; if(a[i]==1 && a[i-1]==1) break; } ///模为0的情况。 a[0] = a[i-2]; N = N%(i-2); printf("%d\n",a[N]); return 0; }