1. 程式人生 > 實用技巧 >矩陣快速冪

矩陣快速冪

A為P×M的矩陣,B為M×Q的矩陣,設矩陣C為矩陣A與B的乘積

在矩陣乘法中,C矩陣的第i行第j列的數,就是由矩陣A第i行M個數與矩陣B第jM個數分別相乘再相加得到的。

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; } }