์ค๋ฒ1 : ๋ถํ ์ ๋ณต ๋ฌธ์ ์ด๋ค.
์๊ฐ
ํน์ ํ๋ ฌ์ 10๋ฒ ๊ณฑํ๋ผ๋ ์๋ฏธ๋, ๊ณง ์ด๋ ๊ฒ ํด์ ๋๋ค.
\\begin{align} A^10 & = A^2 \times A^5 \\ &= A^2 \times A^2 \times A^3 \\ &= A^2 \times A^2 \times A^2 \times A \\ \\end{align}๊ฒฐ๊ตญ, 10์ด๋ผ๋ ์ซ์๊ฐ ๋ค์ด์์ ๋, 2๋ก ๋๋์ด์ง๋ฉด A๋ฅผ ์ ๊ณฑํ๊ณ ans์ ์ ๋ฐ์ดํธ, ๋๋์ด์ง์ง ์์ผ๋ฉด A๋ฅผ ํ๋ฒ ๊ณฑํ๊ณ , A์ ๊ณฑ์ ๊ณฑํ์ฌ ์ ๋ฐ์ดํธ ํ๋ค.
typedef vector<vector<int>> matrix;
matrix operator * (const matrix &a, const matrix &b) {
int n = int(a.size());
matrix ans(n, vector<int>(n));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
ans[i][j] += a[i][k] * b[k][j];
}
ans[i][j] %= 1000;
}
}
return ans;
}
matrix go(matrix a, long long b){
int n = int(a.size());
matrix ans(n, vector<int>(n));
if (b == 0) return ans;
if (b % 2) ans = ans * a;
return ans * go(a*a, b/2);
}
int main(){
int n;
long long b;
cin >> n >> b;
matrix a(n, vector<int>(n));
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> a[i][j];
matrix ans == calc(a, b);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << ans[i][j] << ' ';
}cout << '\n';
}
}