问题描述
给定一个矩阵A,一个非负整数b和一个正整数m,求A的b次方除m的余数。
其中一个nxn的矩阵除m的余数得到的仍是一个nxn的矩阵,这个矩阵的每一个元素是原矩阵对应位置上的数除m的余数。
要计算这个问题,可以将A连乘b次,每次都对m求余,但这种方法特别慢,当b较大时无法使用。下面给出一种较快的算法(用A^b表示A的b次方):
若b=0,则A^b%m=I%m。其中I表示单位矩阵。
若b为偶数,则A^b%m=(A^(b/2)%m)^2%m,即先把A乘b/2次方对m求余,然后再平方后对m求余。
若b为奇数,则A^b%m=(A^(b-1)%m)*a%m,即先求A乘b-1次方对m求余,然后再乘A后对m求余。
这种方法速度较快,请使用这种方法计算A^b%m,其中A是一个2x2的矩阵,m不大于10000。

输入格式
输入第一行包含两个整数b, m,第二行和第三行每行两个整数,为矩阵A。
输出格式
输出两行,每行两个整数,表示A^b%m的值。
样例输入
2 2
1 1
0 1

样例输出
1 0
0 1

分析:1.用快速幂的解法递归下去即可
2.按照题目测试数据,矩阵的0次方,应该为全部数字为0, 矩阵的1次方,矩阵不变~

#include <iostream>
#include <vector>
using namespace std;
int m;
vector<int> mul(vector<int> a, vector<int> b) {vector<int> ans(5);ans[1] = (a[1] * b[1] + a[2] * b[3]) % m;ans[2] = (a[1] * b[2] + a[2] * b[4]) % m;ans[3] = (a[3] * b[1] + a[4] * b[3]) % m;ans[4] = (a[3] * b[2] + a[4] * b[4]) % m;return ans;
}
vector<int> f(vector<int> v, int b) {vector<int> minn(5), nulln(5);minn[1] = minn[4] = 1;if (b == 0) {return mul(nulln, minn);} else if (b == 1) {return mul(v, minn);} else if (b % 2 == 0) {vector<int> t(5);t = f(v, b / 2);return mul(t, t);} else {return mul(f(v, b - 1), v);}
}
int main() {vector<int> v(5), ans;int b;cin >> b >> m;cin >> v[1] >> v[2] >> v[3] >> v[4];ans = f(v, b);printf("%d %d\n%d %d\n", ans[1], ans[2], ans[3], ans[4]);return 0;
}

蓝桥杯 ADV-61 算法提高 矩阵乘方相关推荐

  1. 蓝桥杯 算法提高 矩阵乘方

    算法提高 矩阵乘方   时间限制:1.0s   内存限制:512.0MB      问题描述 给定一个矩阵A,一个非负整数b和一个正整数m,求A的b次方除m的余数. 其中一个nxn的矩阵除m的余数得到 ...

  2. 蓝桥杯题库 算法提高非vip部分(C++、Java)代码实现(251-280)

    文章目录 ADV-251 Petri Net Simulation cpp: java: ADV-252 Navigation cpp: ADV-256 The Sky is the Limit cp ...

  3. 矩阵乘法 算法训练 试题_蓝桥杯习题集_ 算法训练 矩阵乘法

    原文: 算法训练 矩阵乘法 时间限制:1.0s   内存限制:512.0MB 问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s, ...

  4. [蓝桥杯]测试题 E 算法提高 我们的征途是星辰大海 题解和C++示例代码

    E 算法提高 我们的征途是星辰大海 时间限制:1.0s   内存限制:256.0MB 最新的火星探测机器人curiosity被困在了一个二维迷宫里,迷宫由一个个方格组成. 共有四种方格: '.' 代表 ...

  5. 【蓝桥杯练习】算法提高 贪吃的大嘴

    问题描述 给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个. 输入格式 输入的第一行包含两个整数n, m,分别表示物品的个数和背包能 ...

  6. 蓝桥试题 算法提高 矩阵翻转

    21-22-1蓝桥训练1 D.试题 算法提高 矩阵翻转 问题描述: Ciel有一个N*N的矩阵,每个格子里都有一个整数.N是一个奇数,设X = (N+1)/2.Ciel每次都可以做这样的一次操作:他从 ...

  7. 【预览】蓝桥杯竞赛python算法笔记 代码模板|吐血总结|蓝桥杯省赛国赛

    [预览]蓝桥杯竞赛python算法笔记 代码模板|吐血总结 完整版链接 文章目录 [预览]蓝桥杯竞赛python算法笔记 代码模板|吐血总结 1 二分算法求分界值 2 双指针算法 2.1 求最长的不包 ...

  8. 蓝桥杯:试题 算法训练 Remember the A La Mode

    蓝桥杯:试题 算法训练 Remember the A La Mode 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 Hugh Samston经营着一个为今年的ICPC世界总决赛的参 ...

  9. 【完整版】蓝桥杯竞赛python算法笔记 代码模板|吐血总结|蓝桥杯省赛国赛

    蓝桥杯竞赛python算法笔记 代码模板|吐血总结 文章目录 蓝桥杯竞赛python算法笔记 代码模板|吐血总结 1 二分 1.1 二分求最大满足(check红色条件) 1.2 二分求最小满足(che ...

最新文章

  1. 机房布线的最高境界……
  2. C++十进制转二进制
  3. FIR数字滤波器设计频率抽样法MATLAB仿真
  4. 亲和数 杭电2040
  5. nginx开机自启动
  6. python 装饰器装饰类
  7. c语言中验证巴德哥赫猜想,哥赫巴德猜想具体内容是什么?
  8. 设计模式学习之--Singleton(单例)模式
  9. HALCON 20.11:学习笔记---一维测量(Measuring)
  10. 免费赠送2本新书《iOS程序员面试笔试真题与解析》
  11. liunx 中一个命令可以检测 ps -C java --no-heading| wc -l 一般用于shell脚步编写用
  12. 详解:路由器性能的各项指标
  13. 【无标题】全国矢量地图下载
  14. 修改linux的ip地址及网关,Linux 修改 IP地址 和 网关
  15. codevs 3315 时空跳跃者的魔法 MST
  16. goldenDict有道地址
  17. [附源码]Node.js计算机毕业设计大学生学科竞赛管理系统Express
  18. 雲禾遗密:Web3js调用智能合约查看某账户ERC20代币数量
  19. 打造急速开发框架FastApp
  20. 如何在自己的所擅长的领域简历优势

热门文章

  1. Jquery框架核心部分例子 .
  2. 理解 Java 的 GC 与 幽灵引用
  3. docker之快速部署gogs git
  4. Mac node js环境的安装与测试
  5. Zxing 的集成 ---- Maven 对应 Gradle 的写法
  6. 配置eclipse编写html/js/css/jsp/java时自动提示
  7. SQL Server 触发器 详细讲解
  8. 敏捷个人A1组第二次讨论纪要 你在事业上打算何去何从?
  9. linux企业版笔记之Samber服务的基本配置
  10. NQL.Net 简介