矩阵乘法:A的行*B的列
小技巧 :
在用函数调用 矩阵的时候,直接 利用一个结构体去解决
struct sfs{ long long a[M][M]; }p,ans; int n; long long m; sfs xx(sfs a, sfs b) { sfs box; for(ri i=1;i<=n;i++) for(ri j=1;j<=n;j++) box.a[i][j]=0; for(ri i=1;i<=n;i++) for(ri j=1;j<=n;j++) for(ri k=1;k<=n;k++) box.a[i][j]+=(a.a[i][k]*b.a[k][j])%P,box.a[i][j]%=P; return box; } void qsn(sfs a,long long b) // 调用的函数是里面的 类型 { for(ri i=1;i<=n;i++) { ans.a[i][i]=1; } while(b) { if(b&1) ans=xx(ans,a); b>>=1; a=xx(a,a); } }