定义
矩阵快速幂
矩阵快速幂应用了和快速幂相同的思想,将指数n进行二进制分解进行高效计算。
实现
int n, MOD;
struct matrix
{
int A[n + 1][n + 1];
};
matrix multiply(matrix& A, matrix& B, int n, int m, int p)
{
matrix C;
for (int i = 1; i <= n; i++) // A的行,C的行
for (int k = 1; k <= p; k++) // A的列,B的行
for (int j = 1; j <= m; j++) // B的列,C的列
C.A[i][j] += A.A[i][k] * B.A[k][j];
// C.A[i][j] = (C.A[i][j] + A.A[i][k] * B.A[k][j]) % MOD; // 取模
return C;
}
matrix quick_pow(matrix& A, int exp)
{
matrix res;
for (int i = 1; i <= n; i++)
res.A[i][i] = 1; // 初始化为单位矩阵
while (exp)
{
if (exp & 1)
res = multiply(res, A, n, n, n);
A = multiply(A, A, n, n, n);
exp >>= 1;
}
return res;
}