矩阵快速幂模板

typedef vector vec;
typedef vector mat;
const int mod=1e9+7;
mat mul(mat &A,mat &B){
    mat C(A.size(),vec(B[0].size()));
    for(int i=0;i<(int)A.size();i++)
        for(int k=0;k<(int)B.size();k++)
            for(int j=0;j<(int)B[0].size();j++)
                C[i][j]=(C[i][j]+A[i][k]*B[k][j])%mod;
    return C;
}

mat pow(mat A,ll n){
    mat B(A.size(),vec(A.size()));
    for(int i=0;i<(int)A.size();i++)
        B[i][i]=1;
    while(n>0){
        if(n&1)  B=mul(B,A);
        A=mul(A,A);
        n>>=1;
    }
    return B;
}

你可能感兴趣的:(矩阵快速幂模板)