반응형

https://www.acmicpc.net/problem/10830

 

10830번: 행렬 제곱

크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다.

www.acmicpc.net

 

왜 자꾸 틀리나했더니 long long int를 "%d"로 받고 있었습니다..

결과 행렬 aa를 단위행렬로 초기화해주고, 3중 포문으로 곱셈을 수행하였습니다.

 

#include <cstdio>
int n, i, j, k;
long long int b;
void cal(int a1[][5], int a2[][5]) {
	int c[5][5] = {0};
	for (i = 0; i < n; i++)
		for (j = 0; j < n; j++)
			for (k = 0; k < n; k++) c[i][j] += a1[i][k] * a2[k][j];
	for (i = 0; i < n; i++)
		for (j = 0; j < n; j++) a1[i][j] = c[i][j] % 1000;
}
int main() {
	int a[5][5], aa[5][5] = {0};
	scanf("%d %lld", &n, &b);
	for (i = 0; i < n; aa[i][i] = 1, i++)
		for (j = 0; j < n && scanf("%d", &a[i][j]); j++);
	while (b) b % 2 ? (cal(aa, a), b--) : (cal(a, a), b /= 2);
	for (i = 0; i < n; printf("\n"), i++)
		for (j = 0; j < n; j++) printf("%d ", aa[i][j] % 1000);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 17609 : 회문  (0) 2021.11.11
백준 13459 : 구슬 탈출  (0) 2021.11.11
백준 6137 : 문자열 생성  (0) 2021.11.11
백준 15501 : 부당한 퍼즐  (0) 2021.11.11
백준 1713 : 후보 추천하기  (0) 2021.11.11

+ Recent posts