행렬제곱 문제

초록귤·2021년 12월 12일
0
import numpy as np
import sys
n,b = map(int, sys.stdin.readline().split(' '))
arr= []
def matrix_pow(A,b):
    if b ==1:
        return A
    else:
        power = np.linalg.matrix_power(A,b)
        return power
arr= [sys.stdin.readline().strip().split(' ') for i in range(n)]
matrix = matrix_pow(arr,b)
for i in range(n):
    for j in  range(n):
        print(matrix[i][j])

원래 풀던 방향

 # 행렬곱셈
def mul(n,matrix1,matrix2):
    result = [[0 for _ in range(n)] for _ in range(n)]
    for i in range(n):
        for j in range(n):
            for k in range(n):
                result[i][j] += matrix1[i][k] * matrix2[k][j]
            result[i][j] %= 1000
    return result
(#2분할)
def devide(n,b,matrix):
    if b ==1:
        return matrix
    elif b==2:
        return mul(n,matrix,matrix)
    else:
        tmp= devide(n,b//2,matrix)
        if b%2 ==0:
            return mul(n,tmp,tmp)
        else:
            return mul(n,mul(n,tmp,tmp),matrix)
(#입력)
n,b=map(int,input().split())
a = [list(map(int,input().split())) for _ in range(n)]
result= devide(n,b,a)
for row in result:
    for num in row:
        print(num%1000,end=' ')
    print()
profile
초록색 귤이 노랑색으로 익어가듯, 실력이 익어가기 위해 노력하는 개발자 초록귤입니다.

0개의 댓글