UVA

找Fn =( Fn-1 + Fn-2 ) mod n 的循环节

暴力找即可

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 typedef unsigned long long ll;
 5 using namespace std;
 6 const int MAXN = 1023;
 7 ll f[MAXN][MAXN*10];
 8 int circle[MAXN];
 9 
10 void init(){
11     for(int k = 2; k<= 1000; k++){
12         f[k][0] = 0, f[k][1] = 1;
13         for(int i = 2; ; i++){
14             f[k][i] = (f[k][i-1] + f[k][i-2])%k;
15             if(f[k][i] == 1 && f[k][i-1] == 0){
16                 circle[k] = i-1;
17                 break;
18             }
19         }
20     }
21 }
22 ll quick_mod(ll a, ll b, ll mod){
23     ll ans = 1;
24     while(b > 0){
25         if(b&1){
26             b--;
27             ans = ans*a%mod;
28         }
29         b >>= 1;
30         a = a*a%mod;
31     }
32     return ans;
33 }
34 void slove(ll a, ll b, int n){
35     int res = quick_mod(a%circle[n], b, circle[n]);
36     cout << f[n][res] << endl;
37 }
38 int main() {
39     //freopen("data.in.txt", "r", stdin);
40    // freopen("data.out.txt", "w", stdout);
41     int t, n;
42     ll a, b;
43     init();
44     scanf("%d", &t);
45     while(t--) {
46         cin >> a >> b >> n;
47         if(n == 1 || a == 0) cout<<0 << endl;;
48         else slove(a, b, n);
49     }
50     return 0;
51 }
原文地址:https://www.cnblogs.com/cshg/p/5933173.html