矩阵快速幂

 

设 A 为 P×M 的矩阵, B 为 M×Q 的矩阵,设矩阵 C 为矩阵 A 与 B 的乘积

在矩阵乘法中,C 矩阵的第 i 行第 j 列的数,就是由矩阵 A 第 i 行 M 个数与矩阵 B 第 j 列 M 个数分别相乘再相加得到的。

struct Matrix {
    ll a[5][5];
    Matrix() { memset(a, 0, sizeof a); } // 
    Matrix operator*(const Matrix &b) const {
        Matrix res;
        for (int i = 1; i <= 4; ++i)  //长度为4的矩阵相乘
            for (int j = 1; j <= 4; ++j)
                for (int k = 1; k <= 4; ++k)
                    res.a[i][j] = (res.a[i][j] + a[i][k] * b.a[k][j]) % mod;
        return res;
    }
} ans, base;
void qpow(int b) { //快速幂
    while (b) {
        if (b & 1) ans = ans * base;
        base = base * base;
        b >>= 1;
    }
}

 

posted @ 2020-08-16 20:08  blowhail  阅读(182)  评论(0编辑  收藏  举报
Live2D