快速幂取模算法
所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余)。在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模算法。我们先从简单的例子入手:求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),能在几乎所有的程序设计(竞赛)过程中通过,是目前最常用的算法之一。

传送门——>矩阵快速幂(教主传授)

如果这篇文章对你产生了帮助,就请给博主一个小小的赞吧!大家的点赞是我创作的最大动力!

通俗易懂,快速幂基本思想相关推荐

  1. HDU 4565So Easy!2012长沙邀请赛A题(共轭构造+矩阵的快速幂)

    So Easy! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  2. 15行代码AC——Link/Cut Tree CodeForces - 614A(爆long long处理+快速幂讲解)

    励志用少的代码做高效表达 Problem describe Programmer Rostislav got seriously interested in the Link/Cut Tree dat ...

  3. 43行代码AC_HDU-2604 Queuing(矩阵快速幂,附详细的知识讲解、模板例题)

    一道经典的矩阵快速幂模板题. 传送门1-->快速幂基本思想 传送门2-->矩阵快速幂讲解(教主传授) 传送门3.1-->HDU-1575(经典矩阵快速幂模板题1) 传送门3.2--& ...

  4. 43行代码AC——HDU 1757 A Simple Math Problem(矩阵快速幂,附快速幂讲解)

    一道经典的矩阵快速幂模板题. 传送门1-->快速幂基本思想 传送门2-->矩阵快速幂讲解(教主传授) 代码(去掉空行43行) #include<iostream> #inclu ...

  5. 40行代码AC_HDU 1575 TrA 矩阵快速幂(附快速幂+矩阵快速幂的讲解)

    一道经典的矩阵快速幂模板题. 传送门1-->快速幂基本思想 传送门2-->矩阵快速幂讲解(教主传授) 心路历程 1.开始看成求主对角线元素和的n次幂了,用快速幂解得.结果压根不对,又仔细看 ...

  6. 矩阵快速幂(教主传授)

    教主传授 快速幂的思想: 假设我们要求a^b,最朴素的方法就是不断地乘a,乘b次,复杂度O(b). 如果b很大,10^9,就需要用快速幂的思想. 例:a=3,b=100: 100的二进制为:11001 ...

  7. 快速幂、矩阵快速幂、快速乘法

    快速幂 快速幂是我们经常用到的一种算法,快速幂顾名思义就是快速的幂运算.我们在很多题目中都会遇到幂运算,但是在指数很大的时候,我们如果用for或者是pow就会超时,这时候就用到了快速幂. 快速幂的原理 ...

  8. 【HDU - 5015 】233 Matrix (矩阵快速幂)

    题干: In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 23333, or ...

  9. 快速幂实现pow函数(从二分和二进制两种角度理解快速幂)

    文章目录 迭代实现快速幂 思路 int的取值范围 快速幂 从二进制的角度来理解 从二分法的角度来理解 代码 复杂度分析 进阶--超级次方 思路 倒序+快速幂 正序+快速幂 代码 复杂度分析 迭代实现快 ...

最新文章

  1. Mysql sql优化(一)
  2. hdu1501 dp:两个字符串能否组成新串,状态表示能,不能。
  3. python os.chdir函数
  4. java修改JFrame默认字体
  5. springboot+多线程简单实现
  6. 数学知识复习:二阶导复合函数的链式法则
  7. 小米真蓝牙耳机说明书_媲美AirPods?小米真无线蓝牙耳机Air 2开箱
  8. 为了一个HTTPS,浏览器操碎了心···
  9. 【漫画】AI小猪的一生---阿里云ET农业大脑如何与特驱集团养出“200公里猪”
  10. 如何使用Mac预览程序将png转换为jpg格式的技巧分享
  11. NetAssist连接报错!
  12. 桌面时间的最佳管理者-软媒时间_我是亲民_新浪博客
  13. 音频文件压缩大小如何操作?分享一个音频压缩的小技巧
  14. 阶乘的0 【南阳 oj 题目84】
  15. 爬取新浪微博(一)Scrapy入门教程
  16. 只用CSS实现轮播图
  17. 戴尔笔记本一键重装win7系统教程
  18. 基于Android的看小说APP源码Android本科毕业设计Android小说阅读器、小说APP源码
  19. Cerebral Cortex:基因和环境对大脑功能连接的影响
  20. 安装windows与Ubuntu双系统,并使用GRUB启动引导器

热门文章

  1. 第44讲:scrapy中间键Middleware的使用
  2. 深入理解软件和硬件(国庆精彩活动预告)
  3. Kafka解惑之Old Producer(3)——Async Analysis
  4. 基于Licode的WebRTC全球分布式架构
  5. Java多线程之Semaphore用法
  6. 大牛书单 | 腾讯技术大咖推荐你五一看这些书
  7. ffmpeg 源码学习之seek play
  8. c/c++比较灵活的方法:回调函数和函数指针
  9. 手绘风格的数据可视化 (萌萌风)Sketchify,及其他可视化工具(商业风)
  10. 使用eclipse开发javaweb登录功能