C++——整数快速幂与矩阵快速幂

本文介绍了如何使用C++实现整数快速幂和矩阵快速幂。整数快速幂利用二进制编码简化计算,而矩阵快速幂则可以应用于快速求解斐波那契数列和泰波那契数列。文中给出了相应的代码实现。
摘要由CSDN通过智能技术生成

整数快速幂

传统情况下求解整数快速幂,需要使用一个for循环,不断乘,循环n-1次

整数快速幂的思路在于x^(m+n) = x^(n) * x^(m),以此通过不断将原始整数累乘,这里设定幂依次为1,2,4,8……可以看到正好为二进制进位,因此利用将次数转为二进制编码,如9的二进制编码应为1001,来简化计算过程

以下是代码:

int quickpow(int x,int n){
   
    int res = x;
    int ans = 1;
    while(n){
   
        if(n&1){
   
            ans = ans * res;
        }
        res = res * res;
        n=n>>1;
    }
    return ans;
}

矩阵快速幂

基于整数快速幂幂的理念,我们可以照猫画虎写出矩阵快速幂的代码,为了简化代码风格,分为两个函数,mul实现正常两个矩阵的乘法,quickmatrix实现矩阵快速幂。

整数中的初始1,转为矩阵的单位矩阵。
整数中的幂N,保持不变
整数中的初始整数,转为初始矩阵

以下是代码:

vector<vector<int>> mul(vector<vector<int>> v1,vector<vector<int>> v2){
   
    int n = v1.size();
    vector<vector<int>> v(n,vector<int>(n,0));
    for(int i=0;i<n;i++){
   
        for(int j=0;j<n;j++){
   
            for(int k=0;k<n;k++){
   
                v[i][j] += v1[i][k] * v2[k][j];
            }
        }
    }
    return v;
}

vector<vector<int
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值