- 类型long long必不可少!!!
- 矩阵乘法运算法则
- 单位矩阵乘任意矩阵结果为任意矩阵本身(单位矩阵是对角线为1,其他位置为零的矩阵)
- memcpy(目标数组,被复制数组,sizeof(被复制数组));
#include<stdio.h>
#include<string.h>
const int p=1e9+7;
long long n,k;
long long mat[101][101],mat1[101][101],fin[101][101]={0},fin1[101][101]={0};
void pow(long long k)
{
int i,j,z;
long long c;
while(k)
{
if(k&1)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
c=0;
for(z=0;z<n;z++)
{
c=(c+mat[i][z]*fin1[z][j]%p)%p;
}
fin[i][j]=c%p;
}
memcpy(fin1,fin,sizeof(fin));
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
c=0;
for(z=0;z<n;z++)
{
c=(c+mat[i][z]*mat[z][j]%p)%p;
}
mat1[i][j]=c%p;
}
memcpy(mat,mat1,sizeof(mat1));
k>>=1;
}
}
int main()
{
int i,j;
scanf("%lld%lld",&n,&k);
for(i=0;i<n;i++)
fin1[i][i]=1;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&mat[i][j]);
pow(k);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",fin[i][j]%p);
}
printf("\n");
}
return 0;
}