首页 > 代码库 > UVA-11582 数学
UVA-11582 数学
UVA-11582
题意:
求f[a^b]%n ,其中f是斐波那契数列,1<=n<=1000,0<=a,b<=2^64;
代码:
//这题重点是要发现 f[i]%n会出现循环,然后找出他的循环节m取 a^b%m 即可 #include<iostream>#include<cstdio>#include<cstring>using namespace std;typedef unsigned long long ull;ull f[1000009];int re[1009],t;int pow_mod(ull a,ull b,ull mod){ if(b==0) return 1; ull tmp=pow_mod(a,b/2,mod); tmp=tmp*tmp%mod; if(b&1) tmp=a*tmp%mod; return tmp;}int main(){ for(int i=2;i<=1000;i++){ ull pre=1,pree=0,now,mod=i; for(int j=2;j<=1000000;j++){ now=(pre+pree)%mod; if(now==1&&pre==0){ re[i]=j-1; break; } pree=pre;pre=now; } } f[0]=0;f[1]=1; ull a,b; int n; scanf("%d",&t); while(t--){ scanf("%llu%llu%d",&a,&b,&n); if(n==1||a==0){ printf("0\n"); continue; } int p=pow_mod(a%re[n],b,re[n]); //cout<<p<<endl; for(int i=2;i<=p;i++) f[i]=(f[i-1]+f[i-2])%n; printf("%llu\n",f[p]); } return 0;}
UVA-11582 数学
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。