您的位置:首页 > 其它

矩阵模版(新)

2016-08-27 13:28 148 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: