求解矩阵 A 的 N 次方,我们可以类比整数快速幂,写一个矩阵的结构体,用一个matmul函数来定义矩阵的乘法,具体实现过程与整数快速幂类似(整数快速幂)
模板
struct mat
{
ll m[maxn][maxn];
}unit;
void init()
{
for(int i=1;i<maxn;i++)
unit.m[i][i]=1;
}
mat matmul(mat a,mat b)//ans=矩阵a*矩阵b
{
mat ans;
ll tmp =0;
for(int i=1;i<maxn;i++)
{
for(int j=1;j<maxn;j++)
{
tmp=0;
for(int k=1;k<maxn;k++)
{
tmp=(tmp+a.m[i][k]*b.m[k][j])%mod;
}
ans.m[i][j]=tmp;
}
}
return ans;
}
mat QuickPow(mat a,ll n)//res=矩阵a^n
{
mat tmp = a;
mat res=unit;
while(n)
{
if(n&1)
res=matmul(res,tmp);
tmp = matmul(tmp,tmp);
n>>=1;
}
return res;
}