蓝桥杯 - [基础练习VIP]矩阵乘法(矩阵快速幂)
发布日期:2021-07-01 00:18:24 浏览次数:2 分类:技术文章

本文共 1075 字,大约阅读时间需要 3 分钟。

题目链接:

时间限制:1.0s 内存限制:512.0MB

问题描述

给定一个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

解题思路

线性代数,模拟矩阵相乘的过程。

#include 
using namespace std;typedef long long ll;struct Mat { ll m[35][35];}ans, a;int n, m;Mat Mul(Mat a, Mat b) { Mat c; memset(c.m, 0, sizeof(c.m)); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) for (int k = 0; k < n; k++) c.m[i][j] += a.m[i][k] * b.m[k][j]; return c;}int main() { scanf("%d%d", &n, &m); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) scanf("%d", &a.m[i][j]); for (int i = 0; i < n; i++) ans.m[i][i] = 1; while (m) {//矩阵快速幂 if (m & 1) ans = Mul(ans, a); a = Mul(a, a); m >>= 1; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) printf("%d ", ans.m[i][j]); printf("\n"); } return 0;}

转载地址:https://lzyws739307453.blog.csdn.net/article/details/90318403 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:蓝桥杯 - [2013年第四届真题]买不到的数目(数论|动态规划)
下一篇:蓝桥杯 - [基础练习VIP]矩形面积交(线段交)

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月15日 08时01分44秒