求a的b次方。(比如求 2^256 和2^16)

去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模算法。

普通算法:

LL qwe1(LL x,LL y){LL res = 1;for(LL i=1; i<=y; ++i) res *= x;return res;
}

复杂度: O(n)

求 2^256 会溢出, 求2^16要循环16次;

很显然,当a 和 b很大时就会溢出,而且有可能会超时

快速幂算法:

LL qwe2(LL x,LL y){LL t = 1;while(y){if(y & 1)t = t * x % Mod;y >>= 1;x = x * x % Mod;}return t;
}

复杂度 : O(logn)

求 2^256的过程,循环只执行了9次;

2^256 == 4^(128) == 16^(64) == 256^(32) == 65536^16 == (256*256)^8 …… ==792845266;

求2^16的过程循环只执行了5次;

2^16 == 4^8 == 16^4  == 256^2 == 65536 ;

这个算法能在几乎所有的程序设计(竞赛)过程中通过,是目前最常用的算法之一。

代码的实现:

#include <bits/stdc++.h>
typedef long long LL;
const int MaxN = 1e5;
const int Mod = 1e9 + 7;
using namespace std;LL a,b,cnt1 = 0,cnt2 = 0;
LL qwe1(LL x,LL y){LL res = 1;for(LL i=1; i<=y; ++i){res *= x;cnt1++;}return res;
}
LL qwe2(LL x,LL y){LL t = 1;while(y){if(y & 1)t = t * x % Mod;y >>= 1;x = x * x % Mod;cnt2++;}return t;
}
int main(){cin>>a>>b;cout<<qwe1(a,b)<<endl;cout<<cnt1<<endl;cout<<qwe2(a,b)<<endl;cout<<cnt2<<endl;return 0;
}

快速幂算法(qwe)相关推荐

  1. 六十八、快速幂算法、牛顿迭代法、累加数组+二分查找的变形

    @Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 上次介绍了二分查找算法及其四个变形问题,下面介绍二分法常用的场景和典 ...

  2. 快速幂算法相关题目(Leetcode题解-Python语言)

    50. Pow(x, n) 快速幂算法的目的,就是快速计算 x 的 n 次方.基本思路是把 n 视作二进制数,则 n 可以被分解为多个 2 的幂次方之和,如 12 对应 1100 等于 0∗20+0∗ ...

  3. 【复习】快速幂算法详解

    快速幂算法 就是求一个高精度幂次取余时的一个快速算法 比如我们要求aba^bab%m的时候 应用于快速幂算法 也就是将O(n)转化为O(logn)的算法 他的原理就是: 252^525 = 2∗2∗2 ...

  4. java位运算求幂,程序员必学:快速幂算法

    前阵子,有小伙伴在我B站的算法教程底下留言 小伙伴们有任何疑问或者希望我解说任何内容,都可以在我的小我私家B站或民众号(xmg_mj)留言哦,我会尽我最大能力.只管抽时间去写文章\录视频来回应人人. ...

  5. 【算法分析与设计】快速幂算法与快速幂取模算法

    文章目录 快速幂算法 算法分析 算法实现 位运算优化 BigInteger支持 快速幂取模算法 算法优点 算法推导 算法实现 BigInteger支持 本文完整代码实现(Java语言描述) 快速幂算法 ...

  6. python快速幂算法解决大数取模

    1.前置性质 模运算的性质 [(a mod n)×(b mod n)] mod n = (a×b) mod n 指数可以拆分成二进制的形式,如9拆分成 1001 根据二进制的计算,1001 = ((1 ...

  7. 你必须掌握的,快速幂算法

    文章目录 1. 使用快速幂算法实现Pow(x,n) 2. 快速幂取余 1. 使用快速幂算法实现Pow(x,n) 求x的n次方,可以使用暴力解法,这种算法时间复杂度为O(n),并且,当x和n比较大的时候 ...

  8. RSA密码的手动算法+快速幂算法

    公钥加密方案(非对称加密算法) 1.为什么要引入公钥加密方案? 密码学中的加密方案分成对称密钥和非对称密钥(也就是我们说的公钥加密,代表加密算法是RSA加密算法). 而对称加密方法有一个特点,任何通信 ...

  9. LeetCode50——一题学会快速幂算法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode的第31篇文章,我们来看下LeetCode的第50题,求一个数的幂. 题意 这道题的题意只有一句话,就是给定两个数x和 ...

  10. 快速幂算法 超详细教程

    快速幂 求幂运算 快速幂引入 快速幂 二进制 快速幂 指数折半 快速幂的应用 求幂运算 求幂运算大家都不陌生,幂是指数运算的结果,当m是正整数时nᵐ的意义为m个n相乘,n的m次幂也就是n的m次方.用代 ...

最新文章

  1. java验证生日的正则表达式
  2. c语言之动态分配空间
  3. 内核模块编程之入门(二)—必备知识
  4. 查询公司资产数据库中的主机是否在zabbix的监控中
  5. html页面阅读pdf,在HTML中查看PDF文件的最佳阅读器-HTML PDF Viewer
  6. 用Python爬取GDP数据
  7. win7系统如何添加打印机服务器,Win7如何开启打印机服务?Win7如何添加打印机?...
  8. ios开发学习--按钮(Button)效果源码分享
  9. gephi mysql_用爬虫和 Gephi 研究微博好友二度人脉分析|Mo’s blog
  10. OpenStack部署(图文详解)
  11. 如何让梯形变成平行四边形_把梯形转化成平行四边形.ppt
  12. SVN commit的时候报错conflicted state
  13. 假设检验,p-value,glm
  14. BZOJ3838 : [Pa2013]Raper
  15. postgresql 修改id的自增起始数
  16. python矩阵变成图片_Python图片转换成矩阵,矩阵数据转换成图片
  17. iOS 音视频录制之播放视频,AVPlayer可播放本地视频和在线视频
  18. PCB电路板原理图中VCC、VDD、VEE、VSS、VBAT各表示什么意思?
  19. etal中间有空格吗_科学网—英文论文中i.e.,e.g.,etc.,viz.的简要小结 - 贾琼的博文...
  20. 给谷歌浏览器添加网页翻译插件

热门文章

  1. 用简单的Python HTTP server来共享文件
  2. 向量叉积和点积混合运算_叉乘点乘混合运算公式
  3. 建筑施工企业工程项目成本管理软件
  4. 区块链开发用什么语言好?
  5. 带你学习《深入理解计算机系统》虚拟存储器(1)——虚存概念及页、页表和地址翻译基础
  6. 5G移动通信发展历程
  7. 求方差FPGA的实现方法
  8. 华为的少将人才选拔方法
  9. android 计时器工具类,Android实现计时器功能
  10. 风变编程-python(基础语法-第1关)