#include<iostream>
#include<cstring>
using namespace std;
typedef struct Matrix
{
int matrix[35][35];
Matrix()
{
memset(matrix,0,sizeof(matrix));
}
}Matrix;
Matrix M_multi(Matrix a,Matrix b,int d) //矩阵乘法
{
Matrix c;
for(int i=0;i<d;i++)
{
for(int j=0;j<d;j++)
{
for(int k=0;k<d;k++)
{
c.matrix[i][j]+=a.matrix[i][k]*b.matrix[k][j];
}
}
}
return c;
}
int main()
{
int d,n;
Matrix s,t;
cin >> d >> n;
for(int i=0;i<d;i++)
{
for(int j=0;j<d;j++)
{
cin >> t.matrix[i][j];
if(i==j)
s.matrix[i][j]=1; //单位矩阵
}
}
while(n) //快速幂
{
if(n&1)
{
s=M_multi(s,t,d);
}
t=M_multi(t,t,d);
n>>=1;
}
for(int i=0;i<d;i++)
{
for(int j=0;j<d;j++)
{
cout << s.matrix[i][j];
if(j==d-1)
cout << endl;
else
cout << ' ';
}
}
return 0;
}
矩阵快速幂
最新推荐文章于 2018-09-11 14:36:23 发布