矩阵快速幂模板

const int tn=2;
struct Matrix
{
    ll m[111][111];
    Matrix()
    {
        memset(m,0,sizeof(m));
    }
    friend Matrix operator*(Matrix a,Matrix b)
    {
        Matrix res;
        double x;
        for(int i=0; i<tn; i++)
        {
            for(int j=0; j<tn; j++)
            {
                x=0;
                for(int k=0; k<tn; k++)
                {
                    x=(x+(ll)a.m[i][k]*b.m[k][j])%MOD;      //ll不能定为int,防止爆int
                }
                res.m[i][j]=x;
            }
        }
        return res;
    }
    friend Matrix operator+(Matrix a,Matrix b)
    {
        Matrix res;
        ll x;
        for(int i=0; i<tn; i++)
        {
            for(int j=0; j<tn; j++)
            {
                res.m[i][j]=(a.m[i][j]+b.m[i][j])%MOD;
            }
        }
        return res;
    }
    friend Matrix operator^(Matrix a,int b)
    {
        Matrix ans;
        for(int i=0;i<tn;i++) ans.m[i][i]=1;
        for(int i=b; i; i>>=1,a=a*a)
            if(i&1)ans=ans*a;
        return ans;
    }
} T,F;

posted @ 2017-04-12 11:58  江南何采莲  阅读(116)  评论(0编辑  收藏  举报