解题思路:

1、

序列公式

f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.

很明显这是一道找规律的题目。

用到模数的一个性质 (a*b)%m=(a%m * b%m)%m, (a+b)%m=(a%m+b%m)%m

由此 f(n)=(A%7*f(n-1)+B%7*f(n-2))%7

虽然1 <= A, B <= 1000,但是A%7与B%7的值的范围只有0~6,也就是说共有49种情况,代入个数手工推算一下,可以发现

f(n)会出现循环(这个是必然的)

知道这个规律后,算法应该很简单了。

2、



结论:必然会出现循环这是基于下面事实:1. R(n+2)=F(n+2) mod P=(F(n+1)+F(n)) mod P=(F(n+1) mod p +F(n) modp) mod p2. 斐波那契数列的最大公约数定理:gcd(F(m),F(n))=F(gcd(m,n))最大公约数定理表明如果F(k)能被N整除,则F(ik)也能被N整除,这就表明了斐波那契数列所含因子的周期性,下面列举:因子:2,3,4,5, 6,7,8, 9,10,11,12周期:3,4,6,5,12,8,6,12,15,10,12我们称所生成的序列为剩余序列,那么一旦出现某个F(k) 能被N整除(这需证明我的一个猜想:对于任意素数P,F(P),F(P-1)和F(P+1)三个中定有一个能被P整除),以后F(ik)都能被N整除,亦即剩余序列周期地出现0,下一个剩余序列值为N-1种可能,总会重复,有两个相邻的重复该序列就一定重复,亦即具有周期性。这个周期叫做皮萨诺周期The sequence of Fibonacci numbers is periodic modulo any modulus (Wall 1960). These periods are known as Pisano periods (Wrench 1969). The Fibonacci numbers modulo for small are tabulated below, together with their Pisano periods. Sloane (mod )2 3 A0116551, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, ...3 8 A0821151, 1, 2, 0, 2, 2, 1, 0, 1, 1, 2, 0, 2, 2, 1, ...4 6 A0793431, 1, 2, 3, 1, 0, 1, 1, 2, 3, 1, 0, 1, 1, 2, ...5 20 A0821161, 1, 2, 3, 0, 3, 3, 1, 4, 0, 4, 4, 3, 2, 0, ...6 24 A0821171, 1, 2, 3, 5, 2, 1, 3, 4, 1, 5, 0, 5, 5, 4, ...7 16 A0821161, 1, 2, 3, 5, 1, 6, 0, 6, 6, 5, 4, 2, 6, 1, ...8 12 A0793441, 1, 2, 3, 5, 0, 5, 5, 2, 7, 1, 0, 1, 1, 2, ...

3、一个写这个题的博文:

我懒得细看了,先留着。


代码:

#include <iostream>
using namespace std;int main()
{
int a,b,n,i;
int f[150]={1,1,1};//开始我写成了{1},结果后面的全成0了。。。
while (cin >> a >> b >> n,a||b||n)
{
for (i = 3; i < 150; i++)
{
f[i] = (a*f[i-1]+b*f[i-2])%7;
if (f[i]==1 && f[i-1]==1)
break;
}
i=i-2;
int index = n%i;
if (index == 0)//Attention~~~
index = i;
cout << f[index] <<endl;
}