matrix operator * (const matrix& b) const { matrix res; for (int i = 0; i < N; i ++) for (int j = 0; j < N; j ++) for (int k = 0; k < N; k ++) res.m[i][j] += m[i][k] * b.m[k][j]; return res; } };
matrix qpow(matrix a, int p){ matrix res; for (int i = 0; i < N; i ++) res.m[i][i] = 1; //单位矩阵 while (p) { if (p & 1) res = res * a; a = a * a; p >>= 1; } return res; }