链接:传送门
题意:略
思路:f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7 —> f(n) = (A * f(n-1)%7 + B * f(n-1)%7)%7 检查输出可以发现规律,每48个数一循环,因此只需要打出前50个数的fib表然后对n%7即可。
/*************************************************************************
> File Name: 1.cpp
> Author: WArobot
> Blog: http://www.cnblogs.com/WArobot/
> Created Time: 2017年04月22日 星期六 20时14分18秒
************************************************************************/
#include<bits/stdc++.h>
using namespace std;
const int mod = 7;
int a,b,n,f[60];
int main(){
while(scanf("%d%d%d",&a,&b,&n)!=EOF && (a+b+n)){
f[0] = f[1] = 1;
for(int i=2;i<n && i<=50;i++)
f[i] = ((a*f[i-1])%mod + (b*f[i-2])%mod)%mod;
printf("%d
",f[(n-1)%48]);
}
return 0;
}
balabala:如果%6是不是36-1个数一个循环?
answer:并不是,而是24个数一循环
balabala:看来可能没有一个确定的规律,但至少有一点是知道的,对于这种形式 %n 循环数一定是 <= n^2 的。