zoukankan      html  css  js  c++  java
  • 矩阵快速幂模板C++

    思路:和整数快速幂一样,唯一不同的就是存放结果的矩阵初始值为单位矩阵,通过重载运算符*后,代码可以大大简化。另外需要注意的是取模问题,我把模M放在了全局变量,这样省却一些麻烦,可以根据自身需要调整,这个无伤大雅。

    代码示例:

    #include<iostream>  
    #include<cstdio>  
    #include<cstring>  
    using namespace std;  
    const int maxn = 105;   
    const int M = 1e9+7;  
    struct Matrix{  
        int n,m;  
        int v[maxn][maxn];  
        Matrix(int n,int m):n(n),m(m){}  
        void init(){                    //初始化矩阵   
            memset(v,0,sizeof v);  
        }  
        Matrix operator* (const Matrix B) const {  
            Matrix C(n,B.m);            //用来存放答案   
            C.init();  
            for(int i = 0;i < n;i++)  
            for(int j = 0;j < B.m;j++)  
            for(int k = 0;k < m;k++)       
                C.v[i][j] = (C.v[i][j] + v[i][k]*B.v[k][j] % M) % M;  
            return C;  
        }  
        void print(){//输出该矩阵,用来测试   
            for(int i = 0;i < n;i++){  
            for(int j = 0;j < m;j++)  
                cout << v[i][j] << " ";  
            cout << endl;  
            }  
        }  
    };  
    Matrix q_pow(Matrix& A,int b,int M){  
        Matrix C(A.n,A.m);  
        C.init();  
        for(int i = 0;i < C.n;i++)   C.v[i][i] = 1;  
        while(b){  
            if(b&1) C = C*A;  
            A = A*A;  
            b >>= 1;  
        }  
        return C;  
    }  
  • 相关阅读:
    Vue 创建项目
    Vue组件之间的传参
    Vue自定义组件
    Python开发之路
    爬虫
    手撸系列
    Django从入门到不会放弃
    前端
    day29 TCP的三次握手 TCP的四次挥手 基于TCP的socket
    day28 客户端服务端架构介绍
  • 原文地址:https://www.cnblogs.com/long98/p/10352161.html
Copyright © 2011-2022 走看看