您的位置:首页 > 其它

UVa 11582 - Colossal Fibonacci Numbers!(取模+周期)

2015-07-27 10:24 363 查看
计算第aba^b个斐波那契数对nn取模的值。对不同的nn取模,最长n2n^2就会出现循环。首先预处理计算所有可能的值,然后对每个输入快速幂取模找在周期中的位置输出。数据大必须用unsigned long long。

#include<cstdio>
#include<vector>
using namespace std;
typedef unsigned long long LLU;
const int maxn=1010;
vector<int> f[maxn];
void init(){
for(int i=2;i<maxn;++i){
f[i].push_back(0);
f[i].push_back(1%i);
for(int j=2;;++j){
f[i].push_back((f[i][j-1]+f[i][j-2])%i);
if(f[i][j-1]==0&&f[i][j]==1) break;
}
f[i].pop_back(),f[i].pop_back();
}
return;
}
LLU modexp(LLU a,LLU b,LLU mod){
LLU cur=1,tmp=a;
while(b){
if(b&1) cur=cur*tmp%mod;
tmp=tmp*tmp%mod;
b>>=1;
}
return cur;

}
int main(){
init();
int t;scanf("%d",&t);
while(t--){
LLU a,b,n;
scanf("%llu%llu%llu",&a,&b,&n);
LLU k=LLU(f
.size());
printf("%d\n",k?f
[modexp(a%k,b,k)]:0);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: