1用于快速计算矩阵的n次方
2只能用于行数和列数相同的矩阵
代码实现
1矩阵的数据存储
struct matrix{
int a[maxn][maxn];//存储矩阵数据
void clear()//清空矩阵
{
memset(a,0,sizeof(a));
}
void init()//初始化成单位矩阵(对角线全为1)
{
clear();
for(int i=0;i<maxn;i++)
a[i][i]=1;
}
matrix operator *(const matrix&x)const//重载乘法运算符
{
matrix ans;
ans.init();
for(int i=0;i<maxn;i++)
for(int j=0;j<maxn;j++)
for(int k=0;k<maxn;k++)
{
ans.a[i][j]+=this->a[i][k]*x.a[k][j]%mod;
ans.a[i][j]%=mod;
}
return ans;
}
void print()//打印矩阵
{
for(int i=0;i<maxn;i++)
{
for(int j=0;j<maxn;j++)
cout<<a[i][j]<<' ';
cout<<'\n';
}
}
};
2矩阵快速幂
matrix qpow(matrix x,int n)//矩阵快速幂,和快速幂基本相同
{
matrix ans;
ans.init();
while(n)
{
if(n&1)
ans=x*ans;
n>>=1;
x=x*x;
}
return ans;
}