码迷,mamicode.com
首页 > 其他好文 > 详细

矩阵快速幂

时间:2018-01-13 12:52:43      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:names   const   main   ++   return   while   out   pos   ret   

#include<bits/stdc++.h>
using namespace std;
const int ljc=1e9+7;
struct data{//矩阵
    long long z[110][110];
    data() { memset(z,0,sizeof(z)); }
}a;
int n;
long long k;
data cheng(const data &_a,const data &_b){//矩阵乘法
    data _ans;
    for(int _i=1;_i<=n;_i++)
    for(int _j=1;_j<=n;_j++)
    for(int _k=1;_k<=n;_k++)
        (_ans.z[_i][_j]+=_a.z[_i][_k]*_b.z[_k][_j])%=ljc;
    return _ans;
}
void pt(data _a){//输出矩阵
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++)
            cout<<_a.z[i][j]<<‘ ‘;
        cout<<endl;
    }
}
int main(){
    cin>>n>>k;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            scanf("%lld",&a.z[i][j]);
    data ans;
    for(int i=1;i<=n;i++) ans.z[i][i]=1; 
    while(k){//快速幂
        if(k%2)ans=cheng(a,ans);
        k/=2;
        a=cheng(a,a);
    }
    pt(ans);
}

 

矩阵快速幂

标签:names   const   main   ++   return   while   out   pos   ret   

原文地址:https://www.cnblogs.com/A1269180380/p/8278580.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!