矩阵快速幂的模板

以前打的矩阵幂真是丑的要死,现在比以前强了一点,重载运算符能理解一些了,对于矩阵乘认识也深了,码一小份模板。

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<map>
using namespace std;
const int P=2019;
int n;
struct Matrix {
    int x[50][50];
    Matrix(){
        memset(x,0,sizeof(x));
    }
    friend Matrix operator * (Matrix a,Matrix b){
        Matrix c=Matrix();
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                for(int k=1;k<=n;k++)
                    c.x[i][j]=(c.x[i][j]+a.x[i][k]*b.x[k][j])%P;
        return c;
    }
    void I(){
        for(int i=1;i<=n;i++)
            x[i][i]=1;
        return ;
    }
    void add(int a,int b,int c){
        x[a][b]=c;return ;
    }
    void put(int a,int b){
        printf("%d
",x[a][b]);return ;
    }
};
Matrix qpow(Matrix a,int k){
    Matrix c=Matrix(),b=a;
    c.I();
    for(;k;k>>=1,b=b*b)
        if(k&1) c=c*b;
    return c;
}
int main(){
    
}
View Code

add、put操作和qpow写外面纯属个人喜好,重载*还是很优秀的,个人不太喜欢重载^。

原文地址:https://www.cnblogs.com/Yu-shi/p/11203736.html