首页 > 其他 > 详细

矩阵快速幂模板

时间:2014-06-18 22:36:05      阅读:430      评论:0      收藏:0      [点我收藏+]

矩阵快速幂其实跟普通快速幂一样,只是把数换成矩阵而已。

模板,两种写法,亲测可用:

bubuko.com,布布扣
//made by whatbeg
//2014.6.15
struct Matrix
{
    int m[3][3];
};

Matrix Mul(Matrix a,Matrix b)
{
    Matrix c;
    memset(c.m,0,sizeof(c.m));
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            for(int k=0;k<3;k++)
                c.m[i][j] += ((a.m[i][k]*b.m[k][j])%SMod + SMod)%SMod;
    return c;
}

Matrix fastm(Matrix a,int n)  //第一种写法
{
    if(n == 1)
        return a;
    Matrix res = fastm(a,n/2);
    res = Mul(res,res);
    if(n&1)
        res = Mul(res,a);
    return res;
}

Matrix MPow(Matrix a,int n)  //第二种写法
{
    Matrix res;
    memset(res.m,0,sizeof(res.m));
    res.m[0][0] = res.m[1][1] = res.m[2][2] = 1;
    while(n)
    {
        if(n&1)
            res = Mul(res,a);
        n>>=1;
        a = Mul(a,a);
    }
    return res;
}
View Code

 

矩阵快速幂模板,布布扣,bubuko.com

矩阵快速幂模板

原文:http://www.cnblogs.com/whatbeg/p/3790164.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!