10830번: 행렬 제곱
크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다.
www.acmicpc.net
import sys
input = sys.stdin.readline
n, b = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(n)]
def matrix_multiply(A, B):
n = len(A)
result = [[0] * n for _ in range(n)]
for i in range(n):
for j in range(n):
for k in range(n):
result[i][j] += A[i][k] * B[k][j] % 1000
return result
def matrix_power(A, exp):
if exp == 1:
return A
if exp % 2 == 0:
half = matrix_power(A, exp // 2)
return matrix_multiply(half, half)
else:
half = matrix_power(A, (exp - 1) // 2)
return matrix_multiply(matrix_multiply(half, half), A)
result = matrix_power(arr, b)
for row in result:
print(*row)
'BOJ' 카테고리의 다른 글
[JAVA] 백준 7453번 - 합이 0인 네 정수 (0) | 2023.08.26 |
---|---|
[JAVA]백준 1162번 - 도로포장 (0) | 2023.08.25 |
[python]백준 1234번 - 크리스마스 트리 (0) | 2023.08.23 |
[python]백준 1208번 - 부분수열의 합 2 (0) | 2023.08.22 |
[python]백준 5430번 - AC (0) | 2023.08.21 |
댓글