BZOJ 1409 Password 矩阵乘法+线性筛
2015-03-06 17:44
351 查看
题目大意:求p^F
mod q 其中F是斐波那契数列,p是质数,q<p
由于pq互质因此可以套用欧拉定理
然后就是矩乘求斐波那契的事情了- -
垃圾题卡O(√q) 求Phi的时候要枚举质数 不能一个一个枚举
mod q 其中F是斐波那契数列,p是质数,q<p
由于pq互质因此可以套用欧拉定理
然后就是矩乘求斐波那契的事情了- -
垃圾题卡O(√q) 求Phi的时候要枚举质数 不能一个一个枚举
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const long long empty[2][2]={{0,0},{0,0}}; const long long I[2][2]={{1,0},{0,1}}; const long long trans[2][2]={{0,1},{1,1}}; int n,p,q,mod; int prime[100100],tot; bool not_prime[100100]; namespace Matrix_Multiplication{ struct Matrix{ long long xx[2][2]; Matrix(const long long _[2][2]) { memcpy(xx,_,sizeof xx); } long long* operator [] (int x) { return xx[x]; } friend void operator *= (Matrix &x,Matrix y) { int i,j,k; Matrix z(empty); for(i=0;i<2;i++) for(j=0;j<2;j++) for(k=0;k<2;k++) (z[i][j]+=x[i][k]*y[k][j])%=mod; x=z; } }; Matrix Quick_Power(Matrix x,int y) { Matrix re(I); while(y) { if(y&1) re*=x; x*=x; y>>=1; } return re; } } void Linear_Shaker() { int i,j; for(i=2;i<=100000;i++) { if(!not_prime[i]) prime[++tot]=i; for(j=1;prime[j]*i<=100000;j++) { not_prime[prime[j]*i]=true; if(i%prime[j]==0) break; } } } int Phi(int x) { int i,re=x; for(i=1;(long long)prime[i]*prime[i]<=x;i++) if(x%prime[i]==0) { re/=prime[i];re*=prime[i]-1; while(x%prime[i]==0) x/=prime[i]; } if(x!=1) re/=x,re*=x-1; return re; } int Quick_Power(long long x,int y) { long long re=1; while(y) { if(y&1) (re*=x)%=q; (x*=x)%=q; y>>=1; } return re; } int main() { using namespace Matrix_Multiplication; int T; Linear_Shaker(); for(cin>>T>>p;T;T--) { scanf("%d%d",&n,&q); mod=Phi(q); int ans=Quick_Power(trans,n)[1][0]; printf("%d\n",(int)Quick_Power(p,ans)%q); } return 0; }
相关文章推荐
- bzoj 1409: Password 矩阵乘法+线性筛
- BZOJ 1409: Password 线性筛+矩阵乘法
- bzoj 1409 Password 矩阵快速幂+欧拉函数
- bzoj 1409 Password 矩阵快速幂+欧拉函数
- bzoj2126 排斥反应 矩阵乘法
- bzoj 1706 奶牛接力 矩阵乘法
- Bzoj 2875: [Noi2012]随机数生成器(矩阵乘法)
- BZOJ 2738 矩阵乘法(分块)
- BZOJ 4778 Usaco2017 Open COWBASIC 矩阵乘法
- [矩阵乘法+KMP] BZOJ1009: [HNOI2008]GT考试
- 【BZOJ1875】【矩阵乘法】[SDOI2009]HH去散步
- 【BZOJ2738】矩阵乘法【整体二分】
- 【BZOJ 2510】 2510: 弱题 (矩阵乘法、循环矩阵的矩阵乘法)
- 【BZOJ】2738 矩阵乘法 整体二分+树状数组
- 线性递推关系与矩阵乘法
- 【BZOJ 2738】 矩阵乘法|分块|离线
- BZOJ 2326 HNOI 2011 数学作业 矩阵乘法
- 线性代数学习-02-03.矩阵乘法
- [BZOJ 2875 & Vijos 1725] NOI 2012 随机数生成器 · 矩阵乘法+快速乘法
- 【BZOJ2326】【HNOI2011】数学作业 [矩阵乘法][DP]