蓝桥杯 方阵幂次(矩阵快速幂模板题)

蓝桥杯 方阵幂次(矩阵快速幂模板题)

题目描述

给定一个 N N N 阶矩阵 A 和一个常数 M M M,请你输出 A 的 M M M 次幂。

输入描述

输入第一行包含两个整数 N N N, M M M

接下来 N N N行,每行包含 N N N个数,表示矩阵 A。

1 ≤ N ≤ 30 1\leq N \leq 30 1N30 0 ≤ M ≤ 5 0\leq M \leq 5 0M5,矩阵中的每个数 ≤ 5 \leq 5 5

输出描述

输出有 N N N 行,每行 N N N 个整数,表示 A M A^M AM

输入输出样例

示例

输入

2 2
1 2
3 4

输出

7 10
15 22

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

标签: 矩阵快速幂

思路

这是一道矩阵快速幂的模板题,可以理由矩阵快速幂来解决

import os
import sys# 请在此输入您的代码
n,m = map(int,input().split())
a = []
for i in range(n):a.append(list(map(int,input().split())))def multi(A,B):n,m,k = len(A),len(A[0]),len(B[0])ans = [[0]*k for _ in range(n)]for i in range(n):for j in range(k):tmp = 0for z in range(m):tmp += A[i][z]*B[z][j]ans[i][j] = tmpreturn ansdef fast_pow(A,M):N = len(A)res = [[0]*N for _ in range(N)]for i in range(N): res[i][i] = 1while M:if M&1:res=multi(res,A)A = multi(A,A)M >>= 1return resres = fast_pow(a,m)
for i in range(n):for j in range(n):print(res[i][j],end=" ")print()


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部