快速幂模板
Posted Go
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速幂模板相关的知识,希望对你有一定的参考价值。
//快速幂 ll quickMod(ll a,ll b,ll mod){ ll ans=1; while(b){ if(b&1){ ans=(ans*a)%mod; } a=(a*a)%mod; b>>=1; } return ans; } //矩阵快速幂 struct Matrix{ int matrix[maxn][maxn]; Matrix(){} Matrix(int sign){ for(int i=1;i<=sign;i++){ for(int j=1;j<=sign;j++){ if(i==j) matrix[i][j]=1; else matrix[i][j]=0; } } } }; Matrix add(Matrix* a,Matrix* b){ Matrix tmp; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ tmp.matrix[i][j]=a->matrix[i][j]+b->matrix[i][j]; } } return tmp; } Matrix subtract(Matrix* a,Matrix* b){ Matrix tmp; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ tmp.matrix[i][j]=a->matrix[i][j]-b->matrix[i][j]; } } return tmp; } Matrix multiply(Matrix* a,Matrix* b){ Matrix tmp; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ tmp.matrix[i][j]=0; for(int k=1;k<=n;k++){ tmp.matrix[i][j]+=a->matrix[i][k]*b->matrix[k][j]; } } } return tmp; } Matrix quickMod(Matrix base,int b){ Matrix tmp; Matrix ans(n); while(b){ if(b&1){ tmp=multiply(&ans,&base); } ans=tmp; tmp=multiply(&base,&base); base=tmp; b>>=1; } return ans; }
以上是关于快速幂模板的主要内容,如果未能解决你的问题,请参考以下文章
poj 3070 Fibonacci (矩阵快速幂乘/模板)