码迷,mamicode.com
首页 > 其他好文 > 详细

矩阵快速幂模板

时间:2016-09-28 16:27:11      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:

扣了别人的板子

struct Matrix  
{  
    int a[2][2];//矩阵大小根据需求修改  
    Matrix()  
    {  
        memset(a,0,sizeof(a));  
    }  
    void init()  
    {  
        for(int i=0;i<2;i++)  
            for(int j=0;j<2;j++)  
                a[i][j]=(i==j);  
    }  
    Matrix operator + (const Matrix &B)const  
    {  
        Matrix C;  
        for(int i=0;i<2;i++)  
            for(int j=0;j<2;j++)  
                C.a[i][j]=(a[i][j]+B.a[i][j])%MOD;  
        return C;  
    }  
    Matrix operator * (const Matrix &B)const  
    {  
        Matrix C;  
        for(int i=0;i<2;i++)  
            for(int k=0;k<2;k++)  
                for(int j=0;j<2;j++)  
                    C.a[i][j]=(C.a[i][j]+1LL*a[i][k]*B.a[k][j])%MOD;  
        return C;  
    }  
    Matrix operator ^ (const int &t)const  
    {  
        Matrix A=(*this),res;  
        res.init();  
        int p=t;  
        while(p)  
        {  
            if(p&1)res=res*A;  
            A=A*A;  
            p>>=1;  
        }  
        return res;  
    }  
};  

 

矩阵快速幂模板

标签:

原文地址:http://www.cnblogs.com/jhz033/p/5916243.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!