date: 2025-04-11
title: Fast Power
status: DONE
author:
  - AllenYGY
tags:
  - NOTE
  - Fast-Power
  - NumberTheory
publish: falseFast 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;
}