HDU 5895 Mathematician QSC
2016-10-07 01:28
369 查看
题目地址
欧拉函数+矩阵快速幂
欧拉函数+矩阵快速幂
#include<cstdio> #include<algorithm> #include<string.h> #include<queue> #define LL long long using namespace std; const int Nmax=10; LL n,y,x,s,tmp; int mod; int oula_mod; struct Matrix { int n,m; long long map[Nmax][Nmax]; Matrix(int x,int y) { n=x;m=y; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) map[i][j]=0; } Matrix operator * (const Matrix b) { Matrix c(n,b.m); if(m==b.n) { for(int i=1;i<=c.n;i++) for(int j=1;j<=c.m;j++) for(int k=1;k<=m;k++) c.map[i][j]=(c.map[i][j]+(map[i][k]*b.map[k][j])%oula_mod)%oula_mod; return c; } printf("error!!!!!!!!!!!!!!\n"); } }; int oula(int n) { int ret=1,i; for(i=2;i*i<=n;i++) { if(n%i==0) { n/=i,ret*=i-1; while(n%i==0) n/=i,ret*=i; } } if(n>1) ret*=n-1; return ret; } Matrix get(long long n) { Matrix base(4,4); base.map[1][1]=1;base.map[1][2]=1;base.map[1][3]=0;base.map[1][4]=0; base.map[2][1]=0;base.map[2][2]=4;base.map[2][3]=1;base.map[2][4]=4; base.map[3][1]=0;base.map[3][2]=1;base.map[3][3]=0;base.map[3][4]=0; base.map[4][1]=0;base.map[4][2]=2;base.map[4][3]=0;base.map[4][4]=1; Matrix ans(4,4); for(int i=1;i<=ans.n;i++) ans.map[i][i]=1; while(n>0) { if(n & 1) ans=ans*base; base=base*base; n>>=1; } return ans; } long long get_ans(long long times) { long long ans=1; long long base=x; while(times>0) { if(times & 1) ans=(ans*base)%mod; base=(base*base)%mod; times>>=1; } return ans; } int main() { int t; scanf("%d",&t); while(t--) { scanf("%lld%lld%lld%lld",&n,&y,&x,&s); mod=s+1; oula_mod=oula(mod); //printf("oula_mod:%d\n",oula_mod); Matrix base(4,1); base.map[1][1]=0; base.map[2][1]=1; base.map[3][1]=0; base.map[4][1]=0; Matrix ans=get(n*y)*base; long long mi=ans.map[1][1]+oula_mod; //printf("mi:%lld\n",mi ); //continue; printf("%lld\n",get_ans(mi)); } return 0; }
相关文章推荐
- HDU 5895 Mathematician QSC (矩阵快速幂 + 逆元应用 + 指数循环节 + 欧拉函数)
- 【HDU 5895】【指数循环节 矩阵 快速幂 逆元 推公式】Mathematician QSC 由递推式推公式
- 2016 ACM/ICPC Asia Regional Shenyang Online HDU 5895 Mathematician QSC
- HDU-5895 Mathematician QSC
- HDU 5895 欧拉定理+快速幂+公式
- HDU 5895 Mathematician QSC(矩阵快速幂+扩展欧拉定理)
- HDU 5895 Mathematician QSC
- Hdu 5895 Mathematician QSC
- hdu 5895
- HDU 5895 矩阵快速幂+欧拉降幂公式+指数循环节
- HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)——2016 ACM/ICPC Asia Regional Shenyang Online
- hdu 5895 (2016icpc亚洲区域赛青岛站D题 Lucky coins)
- hdu 5895 Mathematician QSC 指数循环节+矩阵快速幂
- hdu 5895(矩阵快速幂+欧拉函数)
- HDU 5895 Mathematician QSC(逆元应用+矩阵快速幂+数论知识)——2016 ACM/ICPC Asia Regional Shenyang Online
- HDU 5895 Mathematician QSC
- hdu-5895 Mathematician QSC(数学)
- 2016 ACM/ICPC Asia Regional Shenyang Online HDU 5895 Mathematician QSC(矩阵快速幂+高次幂取模)★ ★
- HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)——2016 ACM/ICPC Asia Regional Shenyang Online
- HDU 5895 矩阵快速幂+欧拉函数