矩阵快速幂
设 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; } }