## 题目 1472: [蓝桥杯][基础练习VIP]矩阵乘法

时间限制: 1Sec 内存限制: 128MB 提交: 1972 解决: 594

提交地址：

https://www.dotcpp.com/oj/problem.php?id=1472

**题目描述**

```
给定一个N阶矩阵A，输出A的M次幂（M是非负整数）

例如：

A  =

1  2

3  4

A的2次幂

7  10

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
```

### 思路一


```
N,M=map(int,input().strip().split())
A=[]
for i in range(N):
    A.append(list(map(int,input().split())))
def f(A,B,i,j,N):
    re=0
    for k in range(N):
        re+=A[i][k]*B[k][j]
    return re 
    
        
def op(A,M):
    temp=[[0]*N for i in range(N)]
    for i in range(N):
        for j in range(N):
            if i==j:
                temp[i][j]=1
    temp_next=[i.copy() for i in A]
    for i in range(M):
        for i in range(N):
            for j in range(N):
                temp_next[i][j]=f(temp,A,i,j,N)
        temp=[i.copy() for i in temp_next]
#         print(temp)
#         print()
    for i in temp:
        print(' '.join(list(map(str,i))))
    return temp 
op(A,M)
    
            
    
    
```

    2 2
    1 2
    3 4
    7 10
    15 22





    [[7, 10], [15, 22]]



### 思路二


```
N,M=map(int,input().split())
A=[]
for i in range(N):
    A.append(list(map(int ,input().split())))
def op(A,B,N):
    re=[[0]*N for _ in range(N)]
    for i in range(N):
#         temp=A[i]
        for j in range(N):
            for k in range(N):
                re[i][j]+=B[i][k]*A[k][j]
    return re
B=[[0 for j in range(len(A[0]))] for i in range(len(A))]
for i in range(N):
    B[i][i]=1
for i in range(M):
    B=op(A,B,N)
for i in range(N):
    print(' '.join(map(str,B[i])))
```

    2 2 
    1 2
    3 4
    7 10
    15 22