035.快速幂模板
模板
快速幂
long long qpow(long long base,long long e){
long long ans=1;
long long b=base;
while(e){
if(e&1)ans*=b;
b*=b;
e>>=1;
}
return ans;
}
long long qpow(long long base,long long e,long long mod){
long long ans=1;
long long b=base%mod;
while(e){
if(e&1)ans=ans*b%mod;
b=b*b%mod;
e>>=1;
}
return ans;
}
矩阵快速幂
vector<vector<long long>>mat_mult(vector<vector<long long>>&A,vector<vector<long long>>&B,int n){
vector<vector<long long>>C(n,vector<long long>(n));
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
for(int k=0;k<n;k++){
C[i][j]+=A[i][k]*B[k][j];
}
}
}return C;
}
vector<vector<long long>>quick_power(vector<vector<long long>>base,int n,long long e){
vector<vector<long long>>result(n,vector<long long>(n));
for(int i=0;i<n;++i){result[i][i]=1;}
while(e){
if(e&1){
result=mat_mult(result,base,n);
}
base=mat_mult(base,base,n);
e>>=1;
}return result;
}
vector<vector<long long>>mat_mult(vector<vector<long long>>&A,vector<vector<long long>>&B,int n,long long mod){
vector<vector<long long>>C(n,vector<long long>(n));
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
for(int k=0;k<n;k++){
C[i][j]=(C[i][j]+A[i][k]*B[k][j])%mod;
}
}
}return C;
}
vector<vector<long long>>quick_power(vector<vector<long long>>base,int n,long long e,long long mod){
vector<vector<long long>>result(n,vector<long long>(n));
for(int i=0;i<n;++i){result[i][i]=1;}
while(e){
if(e&1){
result=mat_mult(result,base,n,mod);
}
base=mat_mult(base,base,n,mod);
e>>=1;
}return result;
}
I am the bone of my sword

浙公网安备 33010602011771号