n行n列矩阵快速幂模板

来源:互联网 发布:python3.5 socket编程 编辑:程序博客网 时间:2024/05/19 17:06
#include <bits/stdc++.h>using namespace std;const int mod = 1e9 + 7;int n, m; //n行n列矩阵的m次方struct Mat {    int a[110][110];    Mat() {memset(a, 0, sizeof(a));}    Mat operator * (const Mat& o) {        Mat ans;        for(int i = 0; i < n; ++ i) {            for(int j = 0; j < n; ++ j) {                for(int k = 0; k < n; ++ k) {                    ans.a[i][j] = (1LL * ans.a[i][j] + 1LL * a[i][k] * o.a[k][j] % mod) % mod;                }            }        }        return ans;    }};Mat qpow(Mat ret, int m) {    Mat ans;    for(int i = 0; i < n; ++ i) ans.a[i][i] = 1;    while(m) {        if(m & 1) ans = ans * ret;        m >>= 1;        ret = ret * ret;    }    return ans;}int main() {    scanf("%d%d", &n, &m);    Mat ret;    for(int i = 0; i < n; ++ i)        for(int j = 0; j < n; ++ j)            scanf("%d", &ret.a[i][j]);    Mat ans = qpow(ret, m);    for(int i = 0; i < n; ++ i) {        for(int j = 0; j < n; ++ j) {            printf("%d%c", ans.a[i][j], j == n - 1 ? '\n' : ' ');        }    }}
原创粉丝点击