代码仓库(例为2*2的矩阵,其余根据当时情况修改)
struct Matrix {
long long a[2][2];
Matrix() {
memset(a, 0, sizeof(a));
}
Matrix operator * (const Matrix y) {
Matrix ans;
for(int i = 0; i <= 1; i++)
for(int j = 0; j <= 1; j++)
for(int k = 0; k <= 1; k++)
ans.a[i][j] += a[i][k]*y.a[k][j];
for(int i = 0; i <= 1; i++)
for(int j = 0; j <= 1; j++)
ans.a[i][j] %= M;
return ans;
}
void operator = (const Matrix b) {
Matrix ans;
for(int i = 0; i <= 1; i++)
for(int j = 0; j <= 1; j++)
a[i][j] = b.a[i][j];
}
};