date: 2025-04-11
title: Fast Power
status: DONE
author:
- AllenYGY
tags:
- NOTE
- Fast-Power
- NumberTheory
publish: false
Fast Power
乘法快速幂
矩阵乘法、矩阵快速幂
乘法快速幂是计算
其基本思想是将指数
int pow(int a, int b,int mod){
int ans=1;
while(b){
if(b&1) ans=(ans*a)%mod;
a = a*a%p;
b>>=1;
}
return ans;
}
矩阵乘法:
vector<vector<int>> matrixMultiply(const vector<vector<int>>& A, const vector<vector<int>>& B) {
int rowsA = A.size();
int colsA = A[0].size();
int colsB = B[0].size();
vector<vector<int>> C(rowsA, vector<int>(colsB, 0));
for (int i = 0; i < rowsA; ++i) {
for (int j = 0; j < colsB; ++j) {
for (int k = 0; k < colsA; ++k) {
C[i][j] += A[i][k] * B[k][j];
}
}
}
return C;
}
矩阵快速幂:
vector<vector<int>> matrixPow(vector<vector<int>>& M, int n ){
int matrixSize = M.size();
vector<vector<int>> ans(matrixSize, vector<int>(matrixSize, 0));
for(int i=0;i<matrixSize;i++){
ans[i][i]=1;
}
for(;n!=0;n>>=1){
if(n&1) ans = matrixMultiply(ans,M);
M = matrixMultiply(M,M);
}
return ans;
}