通俗易懂,快速幂基本思想
快速幂取模算法
所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余)。在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模算法。我们先从简单的例子入手:求abmodca^{b} mod cabmodc
算法1.直接设计这个算法:
int ans = 1;
for(int i = 1;i<=b;i++) {ans = ans * a;
}
ans = ans % c;
缺点:这个算法存在着明显的问题,如果a和b过大,很容易就会溢出。
于是我们进行改进:
算法2.改进算法:
int ans = 1;
a = a % c;
for(int i = 1;i<=b;i++) {ans = (ans * a) % c;
}
ans = ans % c;
这里补充一句,为什么每次循环取余一次和最后取余一次的结果相等呢?考虑这样一个例子:5%3=2; 如果我们将5拆分成2和3,那么5加多少个3,除3取余后的结果都是一样的。
这个算法在时间复杂度上没有改进,仍为O(b),不过已经好很多的,但是在c过大的条件下,还是很有可能超时,所以,我们推出以下的快速幂算法。
算法3.快速幂算法:
快速幂算法依赖于以下明显的公式:
本算法的时间复杂度为O(logb),能在几乎所有的程序设计(竞赛)过程中通过,是目前最常用的算法之一。
代码展示:
int PowerMod(int a, int b, int c) {int ans = 1;a = a % c;while(b>0) {if(b % 2 = = 1)ans = (ans * a) % c;b = b/2;a = (a * a) % c;}return ans;
}
本算法的时间复杂度为O(logb),能在几乎所有的程序设计(竞赛)过程中通过,是目前最常用的算法之一。
传送门——>矩阵快速幂(教主传授)
如果这篇文章对你产生了帮助,就请给博主一个小小的赞吧!大家的点赞是我创作的最大动力!
通俗易懂,快速幂基本思想相关推荐
- HDU 4565So Easy!2012长沙邀请赛A题(共轭构造+矩阵的快速幂)
So Easy! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- 15行代码AC——Link/Cut Tree CodeForces - 614A(爆long long处理+快速幂讲解)
励志用少的代码做高效表达 Problem describe Programmer Rostislav got seriously interested in the Link/Cut Tree dat ...
- 43行代码AC_HDU-2604 Queuing(矩阵快速幂,附详细的知识讲解、模板例题)
一道经典的矩阵快速幂模板题. 传送门1-->快速幂基本思想 传送门2-->矩阵快速幂讲解(教主传授) 传送门3.1-->HDU-1575(经典矩阵快速幂模板题1) 传送门3.2--& ...
- 43行代码AC——HDU 1757 A Simple Math Problem(矩阵快速幂,附快速幂讲解)
一道经典的矩阵快速幂模板题. 传送门1-->快速幂基本思想 传送门2-->矩阵快速幂讲解(教主传授) 代码(去掉空行43行) #include<iostream> #inclu ...
- 40行代码AC_HDU 1575 TrA 矩阵快速幂(附快速幂+矩阵快速幂的讲解)
一道经典的矩阵快速幂模板题. 传送门1-->快速幂基本思想 传送门2-->矩阵快速幂讲解(教主传授) 心路历程 1.开始看成求主对角线元素和的n次幂了,用快速幂解得.结果压根不对,又仔细看 ...
- 矩阵快速幂(教主传授)
教主传授 快速幂的思想: 假设我们要求a^b,最朴素的方法就是不断地乘a,乘b次,复杂度O(b). 如果b很大,10^9,就需要用快速幂的思想. 例:a=3,b=100: 100的二进制为:11001 ...
- 快速幂、矩阵快速幂、快速乘法
快速幂 快速幂是我们经常用到的一种算法,快速幂顾名思义就是快速的幂运算.我们在很多题目中都会遇到幂运算,但是在指数很大的时候,我们如果用for或者是pow就会超时,这时候就用到了快速幂. 快速幂的原理 ...
- 【HDU - 5015 】233 Matrix (矩阵快速幂)
题干: In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 23333, or ...
- 快速幂实现pow函数(从二分和二进制两种角度理解快速幂)
文章目录 迭代实现快速幂 思路 int的取值范围 快速幂 从二进制的角度来理解 从二分法的角度来理解 代码 复杂度分析 进阶--超级次方 思路 倒序+快速幂 正序+快速幂 代码 复杂度分析 迭代实现快 ...
最新文章
- Mysql sql优化(一)
- hdu1501 dp:两个字符串能否组成新串,状态表示能,不能。
- python os.chdir函数
- java修改JFrame默认字体
- springboot+多线程简单实现
- 数学知识复习:二阶导复合函数的链式法则
- 小米真蓝牙耳机说明书_媲美AirPods?小米真无线蓝牙耳机Air 2开箱
- 为了一个HTTPS,浏览器操碎了心···
- 【漫画】AI小猪的一生---阿里云ET农业大脑如何与特驱集团养出“200公里猪”
- 如何使用Mac预览程序将png转换为jpg格式的技巧分享
- NetAssist连接报错!
- 桌面时间的最佳管理者-软媒时间_我是亲民_新浪博客
- 音频文件压缩大小如何操作?分享一个音频压缩的小技巧
- 阶乘的0 【南阳 oj 题目84】
- 爬取新浪微博(一)Scrapy入门教程
- 只用CSS实现轮播图
- 戴尔笔记本一键重装win7系统教程
- 基于Android的看小说APP源码Android本科毕业设计Android小说阅读器、小说APP源码
- Cerebral Cortex:基因和环境对大脑功能连接的影响
- 安装windows与Ubuntu双系统,并使用GRUB启动引导器