矩阵乘法+快速ni

矩阵乘法: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);
     }     
     
}
View Code
原文地址:https://www.cnblogs.com/Lamboofhome/p/15541500.html