首页 > 其他 > 详细

矩阵模版(新)

时间:2016-08-27 14:04:55      阅读:151      评论:0      收藏:0      [点我收藏+]
#define repf(i,a,b) for(int i=(a);i<=(b);i++)

using namespace std;

typedef long long ll;

const int N = 0;
const int SIZE = 4;

int l, MOD;

struct Mat{
    ll v[SIZE][SIZE];   // value of matrix

    Mat() {
        memset(v, 0, sizeof(v));
    }

    void init(ll _v) {
        repf (i, 0, SIZE)
            v[i][i] = _v;
    }
};

Mat operator * (Mat a, Mat b) {
    Mat c;
    repf (i, 0, SIZE - 1) {
        repf (j, 0, SIZE - 1) {
            c.v[i][j] = 0;
            repf (k, 0, SIZE - 1) {
                c.v[i][j] += (a.v[i][k] * b.v[k][j]) % MOD;
                c.v[i][j] %= MOD;
            }
        }
    }
    return c;
}

Mat operator ^ (Mat a, ll k) {
    Mat c;
    c.init(1);
    while (k) {
        if (k&1) c = a * c;
        a = a * a;
        k >>= 1;
    }
    return c;
}

 

矩阵模版(新)

原文:http://www.cnblogs.com/wsruning/p/5812882.html

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