uva 11582 快速幂 Fibonacci循环节
2017-08-19 09:05
417 查看
题目:
紫书数论10.1 11582 P316题解:
先找出Finonacci的循环节,这里注意a^b%n可以优化为(a%n)^b%n,Unsigned long long 是比long long 在正数范围是前者大的,这里用unsigned long long 可以防止快速幂运算溢出
小于2^64的数要用unsigned long long
代码:
#include <iostream> #include <cstdio> using namespace std; const int maxn = 1000000+100; typedef long long LL; typedef unsigned long long ULL; LL f[maxn]={0,1}; LL getT(LL n) { LL m = n*n+2; int cnt=0; for(LL i=2;i<=m;i++) { f[i]=(f[i-1]+f[i-2])%n; cnt++; if(f[i]==1&&f[i-1]==0) { return cnt; } } } int pow_mod(ULL a, ULL b, ULL m) { if(b==0) return 1; int k=pow_mod(a, b/2, m); k=k*k%m; if(b%2) k=k*a%m; return k; } int main() { int T; cin>>T; ULL a,b,n; while(T--) { scanf("%llu%llu%llu",&a,&b,&n); LL round=getT(n); cout<<round<<endl; if(n!=1){ int tmp = pow_mod(a%round,b,round); cout<<f[tmp]<<endl; } else cout<<"0"<<endl; } return 0; }
相关文章推荐
- 快速幂取模+数学知识(Colossal Fibonacci Numbers! uva 11582)
- Uva11582 Colossal Fibonacci Numbers! (数论、斐波那契循环节)
- UVa11582 - Colossal Fibonacci Numbers! (快速幂 取模)
- uva 11582 - Colossal Fibonacci Numbers!(整数快速幂)
- Uva 11582 Colossal Fibonacci Numbers! (循环节、幂取模、打表)
- uva11582Colossal Fibonacci Numbers!(快速幂+预处理)
- UVa11582 [快速幂]Colossal Fibonacci Numbers!
- Uva 11582 Colossal Fibonacci Numbers! 快速幂,斐波那契
- UVA 11582 Colossal Fibonacci Numbers! 找循环节
- UVa 11582 (快速幂取模) Colossal Fibonacci Numbers!
- UVA - 11582 Colossal Fibonacci Numbers!循环节
- UVA - 11582 - Colossal Fibonacci Numbers!(快速幂+打表)
- Uva 11582(Fibonacci循环节)
- Colossal Fibonacci Numbers! UVA 11582 寻找循环节
- UVa11582 巨大的斐波那契数 循环节计算+快速幂
- UVA 11582 Colossal Fibonacci Numbers!(循环节打表+幂取模)
- UVA11582-Colossal Fibonacci Numbers
- UVa 11582 - Colossal Fibonacci Numbers!
- Colossal Fibonacci Numbers! 巨大的斐波那契数 UVA - 11582
- UVA 11582 Colossal Fibonacci Numbers!(模运算)