您的位置:首页 > 其它

UVA - 11582 Colossal Fibonacci Numbers!循环节

2016-10-05 22:47 429 查看
找Fn =( Fn-1 + Fn-2 ) mod n 的循环节

暴力找即可

#include <cstdio>
#include <iostream>
#include <cstring>
typedef unsigned long long ll;
using namespace std;
const int MAXN = 1023;
ll f[MAXN][MAXN*10];
int circle[MAXN];

void init(){
for(int k = 2; k<= 1000; k++){
f[k][0] = 0, f[k][1] = 1;
for(int i = 2; ; i++){
f[k][i] = (f[k][i-1] + f[k][i-2])%k;
if(f[k][i] == 1 && f[k][i-1] == 0){
circle[k] = i-1;
break;
}
}
}
}
ll quick_mod(ll a, ll b, ll mod){
ll ans = 1;
while(b > 0){
if(b&1){
b--;
ans = ans*a%mod;
}
b >>= 1;
a = a*a%mod;
}
return ans;
}
void slove(ll a, ll b, int n){
int res = quick_mod(a%circle
, b, circle
);
cout << f
[res] << endl;
}
int main() {
//freopen("data.in.txt", "r", stdin);
// freopen("data.out.txt", "w", stdout);
int t, n;
ll a, b;
init();
scanf("%d", &t);
while(t--) {
cin >> a >> b >> n;
if(n == 1 || a == 0) cout<<0 << endl;;
else slove(a, b, n);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: