矩阵
矩阵
//从a[1][1]存到a[n][n],n等于矩阵的长宽
struct Matrix {
ll mat[N][N];
Matrix operator * (const Matrix& b)const {
Matrix ans;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
ans.mat[i][j] = 0;
for (int k = 1; k <= n; k++) {
if (mat[i][k] && b.mat[k][j]) {
ans.mat[i][j] += mat[i][k] * b.mat[k][j];
ans.mat[i][j] %= mod;
}
}
}
}
return ans;
}
};
Matrix q_pow(Matrix a, int b) {
Matrix ans;
memset(ans.mat, 0, sizeof(ans));
for (int i = 1; i <= n; i++) {
ans.mat[i][i] = 1;
}
while (b) {
if (b & 1)
ans = ans * a;
b >>= 1;
a = a * a;
}
return ans;
}Last updated