矩阵快速幂

矩阵快速幂

快速幂: 快速计算一个数的的几次方,例如 2^75, 75 = (1001011),只需要计算2^64 * 2^8 * 2^2 * 2^1
代码:

long long fast_power(int a,int b,int mod){
    long long ans = 1;
    ans %= mod;
    while(b > 0){
        if(b&1)ans = (ans * a) % mod;
        a = (a*a)%mod;
        b >>= 1;
    }
    return ans;
}

矩阵乘法: 如果矩阵m1的行为n,列为k,矩阵m2的行为k,列为m,那么这两个矩阵可以相乘得到一个n * m的矩阵
代码:

vector<vector<int>> multify(vector<vector<int>>&m1,vector<vector<int>>&m2){
    int n = m1.size();
    int k = m1[0].size();
    int m = m2[0].size();
  
    vector<vector<int>>m3(n,vector<int>(m));
    for(int i = 0;i<n;i++){
        for(int j = 0;j<m;j++){
            for(int t = 0;t<k;t++){
                int res = 0;
                res += m1[i][t] * m2[t][j];
            }
            m3[i][j] = res;
        }
    }
    return m3;
}

矩阵快速幂: 和普通的快速幂基本一样,只是乘法换成了矩阵乘法
代码:

vector<vector<int>>power(int n,vector<vector<int>>mx){
	vector<vector<int>>ans = {
		{1,0},
		{0,1}
	};
	while(n > 0){
		if(n&1)ans = multify(ans,mx);
		mx = multify(mx,mx);
		n >>= 1;
	}
	return ans;
}

posted on 2026-08-18 16:28  Sean2299  阅读(4)  评论(0)    收藏  举报

导航