[ 欧拉定理 矩阵快速幂 ] BZOJ5118
来源:互联网 发布:女士电脑双肩包 知乎 编辑:程序博客网 时间:2024/05/21 23:32
如果直接用矩阵快速幂,复杂度是
因为1125899839733759是质数,所以可以用欧拉定理,求出
时间复杂度
#include<bits/stdc++.h>using namespace std;#define ll long longconst ll M=1125899839733759;inline void Add(ll& x,ll y){ x=(x+y)%M;}inline ll Mul(ll x,ll y,ll MOD){ return ((x*y-(ll)(((long double)x*y+0.5)/MOD)*MOD)%MOD+MOD)%MOD;}inline ll Pow(ll x,ll y,ll p){ ll Ans=1; for(;y;y>>=1,x=Mul(x,x,p))if(y&1)Ans=Mul(Ans,x,p); return Ans;}struct Jz{ ll a[3][3]; Jz operator * (Jz b)const{ Jz c; memset(c.a,0,sizeof(c.a)); for(int i=1;i<=2;i++) for(int j=1;j<=2;j++) for(int k=1;k<=2;k++) Add(c.a[i][j],Mul(a[i][k],b.a[k][j],M)); return c; }}a,b;inline Jz Pow(Jz x,ll y){ Jz Ans; memset(Ans.a,0,sizeof(Ans.a)); Ans.a[1][1]=Ans.a[2][2]=1; for(;y;y>>=1,x=x*x)if(y&1)Ans=Ans*x; return Ans;}ll n;int i,j,k,m,p,T;int main(){ scanf("%d",&T); while(T--){ scanf("%lld",&n); memset(a.a,0,sizeof(a.a));a.a[1][1]=1; b.a[1][1]=b.a[1][2]=b.a[2][1]=1;b.a[2][2]=0; n=Pow(2,n,M-1)-1;if(n<0)n+=M-1; a=a*Pow(b,n); printf("%lld\n",a.a[1][1]); } return 0;}
阅读全文
0 0
- [ 欧拉定理 矩阵快速幂 ] BZOJ5118
- hdu 3221 欧拉定理 +快速幂+矩阵快速幂
- Mathematician QSC(欧拉定理+矩阵快速幂)
- HDU-4549(矩阵快速幂+欧拉定理)
- hdu-4549(矩阵快速幂+欧拉定理)
- hdu 4549 M斐波那契数列 【矩阵+快速幂+欧拉定理】
- hdu-5868 Different Circle Permutation 矩阵快速幂 + 欧拉函数 + polya计数定理
- HDU 5895 Mathematician QSC(矩阵快速幂+扩展欧拉定理)
- BZOJ 1409 快速幂+欧拉定理
- HDOJ M斐波那契数列 4549【矩阵快速幂+快速幂+费马小定理+欧拉函数】
- 欧拉函数+矩阵快速幂 Password
- hdu 4549 欧拉定理+各种快速幂
- POJ2154 Color【Polya定理】【欧拉函数】【整数快速幂】
- hdu 1395 欧拉定理+快速幂+素数判定
- HDU 5895 欧拉定理+快速幂+公式
- 【POJ3696】The Luckiest Number-欧拉定理+快速幂
- 矩阵快速幂+快速幂+费马小定理
- BZOJ 1951 [Sdoi2010]古代猪文 欧拉定理+(扩展)lucas定理+逆元+快速幂
- 人工智能进化史:从麦卡锡到“索菲亚” | 精选
- 人脸注册源码faceregiste
- 虚拟现实、云技术、人工智能 未来的教育会有啥不一样 | 观察
- 1072. 开学寄语(20)
- 第六代WiFi芯片上市,博通首发
- [ 欧拉定理 矩阵快速幂 ] BZOJ5118
- yarn架构 及 client提交任务过程讲解
- 人脸认证源码faceIdentify
- C++之string类型
- JavaScript性能优化的小知识点总结
- 如何在AOP中获取Request和Response对象
- 联合体
- 人脸登陆facelogin
- BZOJ蒟蒻百年挖坑计划