矩阵快速幂模板

const ll MOD=1e9+7;
const int MAXN=60; //矩阵阶数
struct Matrix{
    ll m[MAXN][MAXN];
    Matrix()
    {
        memset(m,0,sizeof(m));
        for(int i=0;i<MAXN;i++)
            m[i][i]=1;
    }
    void clear(){
        memset(m,0,sizeof(m));
    }
    void show(){
        for(int i=0;i<MAXN;i++){
            for(int j=0;j<MAXN;j++)
                cout<<m[i][j]<<" ";
            cout<<endl;
        }
    }
};

Matrix mtMul(Matrix A,Matrix B)
{
    int i,j,k,tmp;
    Matrix C;
    C.clear();
    for(int i=0;i<MAXN;i++)
        for(int j=0;j<MAXN;j++)
            for(int k=0;k<MAXN;k++)
                C.m[i][j]=(C.m[i][j]%MOD+(A.m[i][k]%MOD)*(B.m[k][j]%MOD))%MOD;
    return C;
}
Matrix mtPow(Matrix A,int k)
{
    k--;
    Matrix ans=A;
    while(k){
        if(k&1) ans=mtMul(ans,A);
        A=mtMul(A,A);
        k>>=1;
    }
    return ans;
}
View Code

 

posted on 2015-08-26 16:45  onlyAzha  阅读(109)  评论(0编辑  收藏  举报

导航