반응형
곱셈 문제처럼 이진수의 원리를 그대로 적용하여 해결하였다.
행렬의 곱은 A = B * C 일 때, A[r][c] = ∑B[r][k] * B[k][c]를 이용한다.
#include <stdio.h>
typedef unsigned long long int ull;
int N;
ull B;
int matrix[7][7];
int ans[7][7];
void multiply(int matrixA[][7], int matrixB[][7])
{
int temp[7][7] = { 0 };
for (int r = 1; r <= N; r++)
{
for (int c = 1; c <= N; c++)
{
temp[r][c] = 0;
for (int k = 1; k <= N;k++)
temp[r][c] += matrixA[r][k] * matrixB[k][c];
}
}
for (int r = 1; r <= N; r++)
for (int c = 1; c <= N; c++)
matrixA[r][c] = temp[r][c] % 1000;
}
int main(void)
{
scanf("%d %lld", &N, &B);
for (int r = 1; r <= N; r++)
{
for (int c = 1; c <= N; c++)
{
scanf("%d", &matrix[r][c]);
if (r == c) ans[r][c] = 1;
}
}
while (B)
{
if (B & 1) multiply(ans, matrix);
multiply(matrix, matrix);
B /= 2;
}
for (int r = 1; r <= N; r++)
{
for (int c = 1; c <= N; c++)
printf("%d ", ans[r][c]);
putchar('\n');
}
return 0;
}
반응형
'알고리즘 > BAEKJOON' 카테고리의 다른 글
BOJ 1644 : 소수의 연속합 (0) | 2021.04.02 |
---|---|
BOJ 2467, 2470 : 두 용액 (0) | 2021.03.29 |
BOJ 1629 : 곱셈 (0) | 2021.03.24 |
BOJ 2696 : 중앙값 구하기 (0) | 2021.03.20 |
BOJ 4913 : 페르마의 크리스마스 정리 (0) | 2021.03.19 |
댓글