题目要求:
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
A = A的2次幂 =
1 2 7 10
3 4 15 22
输入格式
第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值
输出格式
输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
样例输入
2 2
1 2
3 4
样例输出
7 10
15 22
解题方法:
求幂,相当于求多次乘法,所以核心就是矩阵乘法
def Multi(matrixA,matrixB): # 目标:C_r*p = A_r*s * B_s*p
r = len(matrixA) # A的行数
s = len(matrixB[0]) # B的列数
p = len(matrixB) # B的行数(=A的列数)
matrixC= [[0]* p for i in range(r)] # 初始化矩阵C
for i in range(r):
for j in range(s):
for k in range(p):
matrixC[i][j] += matrixA[i][k]*matrixB[k][j]
return matrixC
def MatrixPower(arr,M):
if M==0: # 幂次
N = len(arr) # 阶数
matrixE = [[0] * N for i in range(N)]
for i in range(N):
for j in range(N):
if i == j:
matrixE[i][j] = 1 # 单位阵
return matrixE
if M==1:
return arr
else:
brr = arr
while M!=1:
M=M-1
brr = Multi(arr,brr)
return brr
if __name__ == '__main__':
N,M = map(int,input().split()) # 阶数、幂
arr=[]
for i in range(N):
arr.append(list(map(int,input().rstrip().split()))) # 输入矩阵
#print(arr) # [[1, 2], [3, 4]]
#求矩阵幂,返回矩阵
brr = MatrixPower(arr,M)
#print(brr) # [[7, 10], [15, 22]]
for i in range(N):
for j in range(N):
print(brr[i][j],end=' ')
print()