当矩阵中元素大小较大时重载的 * 不能正常退出了 源代码: (不是文件输入的问题)
#include<bits/stdc++.h>
using namespace std;
const int N=101,M=1000000007;
struct juzhen
{
unsigned long long a[N][N],x=0,y=0;
friend juzhen operator * (juzhen a,juzhen b)
{//重载的矩阵乘法
juzhen c;
if(a.y!=b.x)return c;
memset(c.a,0,sizeof(c));
c.x=a.x;c.y=b.y;
for(int i=1;i<=c.x;i++)
for(int j=1;j<=c.y;j++)
for(int k=1;k<=a.y;k++)
c.a[i][j]=(c.a[i][j]+(a.a[i][k]*b.a[k][j])%M)%M;
return c;
}
static juzhen fp(juzhen a,long long p)
{//快速幂
juzhen c;
if(a.x!=a.y)return c;
if(p==1)return a;
c.x=a.x;c.y=a.y;
if(p==0)
{
memset(c.a,0,sizeof(c.a));
for(int i=1;i<=c.x;i++)
c.a[i][i]=1;
return c;
}
if(p%2!=0)c=a*fp(a*a,(p-1)/2);
else c=fp(a*a,p/2);
return c;
}
void reada()
{
for(int i=1;i<=x;i++)
for(int j=1;j<=y;j++)
cin>>a[i][j];
return ;
}
void writea()
{
for(int i=1;i<=x;i++)
{
for(int j=1;j<=y;j++)
printf("%lld ",a[i][j]);
printf("\n");
}
return ;
}
}A;
int main()
{
ios::sync_with_stdio(false);
freopen("3390.in","r",stdin);
int n,k;cin>>n>>k;
A.x=n;A.y=n;
A.reada();
juzhen c=juzhen::fp(A,k);
c.writea();
return 0;
}