蓝桥杯 - [基础练习VIP]矩阵乘法(矩阵快速幂)
发布日期:2021-07-01 00:18:24
浏览次数:2
分类:技术文章
本文共 1075 字,大约阅读时间需要 3 分钟。
题目链接:
时间限制:1.0s 内存限制:512.0MB问题描述
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:A =
1 2 3 4A的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
解题思路
线性代数,模拟矩阵相乘的过程。
#includeusing 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月15日 08时01分44秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
包机制介绍
2019-05-01
Java数组详解
2019-05-01
Java面向对象详解
2019-05-01
在Debian 8上使用Apt-Get安装Java
2019-05-01
vs中动态DLL与静态LIB工程中加入版本信息的方法
2019-05-01
大数据分析技术与应用一站式学习(值得收藏)_v20200418
2019-05-01
Qt 在windows下的串口读写
2019-05-01
如何在SpringMVC中配置Atomikos分布式事务
2019-05-01
Spring Boot 注解@EnableAutoConfiguration的解析
2019-05-01
SpringApplication执行流程
2019-05-01
Spring Boot Quartz 动态任务实现方式
2019-05-01
Spring MVC Quartz 动态任务实现方式
2019-05-01
自定义Starter
2019-05-01
Spring Batch 入门之 CSV-to-DB
2019-05-01
日志写入数据库:Log4j2-JDBCAppender
2019-05-01
分布式事务原理探究(一)
2019-05-01
Java并发学习记录之volatile
2019-05-01
spring cloud consul 应用的多实例名的解决
2019-05-01