【【快速幂矩阵】】

直接上代码:
同快速幂思路一样,不过是将快速幂中的值相乘变成矩阵相乘!

struct Matrix   //定义结构体
{
    int m[maxn][maxn];   //矩阵

}ans,res;      //结构体中的答案 ,和需要乘的值

Maxtrix Mul (Matrix A,Matrix B,int n){   //矩阵乘法
    Matrix tmp;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            tmp.m[i][j]=0;
        }
    }                                 //矩阵初始化
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            for(int k=1;k<=n;k++){
                tmp.m[i][j]+=A.m[i][k]*B.m[k][j];
            }
        }
    }                              //线性代数中的矩阵乘法
    return tmp;
}


void QuickPower(int N,int n){               //快速幂
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(i==j)ans.m[i][j]=1;
            else ans.m[i][j]=0; 
        }
    }                                       //初始化ans 矩阵为 单位矩阵
    while(N){                              //开始
        if(N&1){
            ans=Mul(anx,res);              //如果当前位为1 则需要乘当前位的
        }
        res=Mul(res,res);                  //每次进位!res*=res
        N=N>>1;
    }
}


猜你喜欢

转载自blog.csdn.net/wrf20162305/article/details/81479350
今日推荐