首页 > 其他 > 详细

矩阵快速幂总结

时间:2020-07-28 15:09:32      阅读:72      评论:0      收藏:0      [点我收藏+]

快速幂一般都是用来快速递推某个矩阵的n次幂的,一些题目的解法可以通过找规律递推,构建递推矩阵,就可以进行高次计算。

模板自用:

#include <iostream>
#include <vector>
using namespace std;

vector<vector<unsigned long long>> mul(vector<vector<unsigned long long>> a,vector<vector<unsigned long long>> b){
    int n=a.size();
    int s=a[0].size();
    int m=b[0].size();
    vector<vector<unsigned long long>> c(n,vector<unsigned long long>(m,0));
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            for(int k=0;k<s;k++){
                c[i][j]+=a[i][k]*b[k][j];
            }
        }
    }
    return c;
}

vector<vector<unsigned long long>> qmi1(vector<vector<unsigned long long>> a,int k){
    int n=a.size();
    vector<vector<unsigned long long>> res(n,vector<unsigned long long>(n,0));
    for(int i=0;i<n;i++){
        res[i][i]=1;
    }
    while(k){
        if(k&1)res=mul(res,a);
        a=mul(a,a);
        k>>=1;
    }
    return res;
}

unsigned long long qmi2(unsigned long long a,unsigned long long k){
    unsigned long long res=1;
    while(k){
        if(k&1)res=res*1ull*a;
        a=a*1ull*a;
        k>>=1;
    }
    return res;
}

void out(vector<vector<unsigned long long>> a){
    for(int i=0;i<a.size();i++){
        for(int j=0;j<a[0].size();j++){
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
}

记录一次快速幂

矩阵快速幂总结

原文:https://www.cnblogs.com/kstranger/p/13390593.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!