快速幂算法(qwe)
求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)相关推荐
- 六十八、快速幂算法、牛顿迭代法、累加数组+二分查找的变形
@Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 上次介绍了二分查找算法及其四个变形问题,下面介绍二分法常用的场景和典 ...
- 快速幂算法相关题目(Leetcode题解-Python语言)
50. Pow(x, n) 快速幂算法的目的,就是快速计算 x 的 n 次方.基本思路是把 n 视作二进制数,则 n 可以被分解为多个 2 的幂次方之和,如 12 对应 1100 等于 0∗20+0∗ ...
- 【复习】快速幂算法详解
快速幂算法 就是求一个高精度幂次取余时的一个快速算法 比如我们要求aba^bab%m的时候 应用于快速幂算法 也就是将O(n)转化为O(logn)的算法 他的原理就是: 252^525 = 2∗2∗2 ...
- java位运算求幂,程序员必学:快速幂算法
前阵子,有小伙伴在我B站的算法教程底下留言 小伙伴们有任何疑问或者希望我解说任何内容,都可以在我的小我私家B站或民众号(xmg_mj)留言哦,我会尽我最大能力.只管抽时间去写文章\录视频来回应人人. ...
- 【算法分析与设计】快速幂算法与快速幂取模算法
文章目录 快速幂算法 算法分析 算法实现 位运算优化 BigInteger支持 快速幂取模算法 算法优点 算法推导 算法实现 BigInteger支持 本文完整代码实现(Java语言描述) 快速幂算法 ...
- python快速幂算法解决大数取模
1.前置性质 模运算的性质 [(a mod n)×(b mod n)] mod n = (a×b) mod n 指数可以拆分成二进制的形式,如9拆分成 1001 根据二进制的计算,1001 = ((1 ...
- 你必须掌握的,快速幂算法
文章目录 1. 使用快速幂算法实现Pow(x,n) 2. 快速幂取余 1. 使用快速幂算法实现Pow(x,n) 求x的n次方,可以使用暴力解法,这种算法时间复杂度为O(n),并且,当x和n比较大的时候 ...
- RSA密码的手动算法+快速幂算法
公钥加密方案(非对称加密算法) 1.为什么要引入公钥加密方案? 密码学中的加密方案分成对称密钥和非对称密钥(也就是我们说的公钥加密,代表加密算法是RSA加密算法). 而对称加密方法有一个特点,任何通信 ...
- LeetCode50——一题学会快速幂算法
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode的第31篇文章,我们来看下LeetCode的第50题,求一个数的幂. 题意 这道题的题意只有一句话,就是给定两个数x和 ...
- 快速幂算法 超详细教程
快速幂 求幂运算 快速幂引入 快速幂 二进制 快速幂 指数折半 快速幂的应用 求幂运算 求幂运算大家都不陌生,幂是指数运算的结果,当m是正整数时nᵐ的意义为m个n相乘,n的m次幂也就是n的m次方.用代 ...
最新文章
- java验证生日的正则表达式
- c语言之动态分配空间
- 内核模块编程之入门(二)—必备知识
- 查询公司资产数据库中的主机是否在zabbix的监控中
- html页面阅读pdf,在HTML中查看PDF文件的最佳阅读器-HTML PDF Viewer
- 用Python爬取GDP数据
- win7系统如何添加打印机服务器,Win7如何开启打印机服务?Win7如何添加打印机?...
- ios开发学习--按钮(Button)效果源码分享
- gephi mysql_用爬虫和 Gephi 研究微博好友二度人脉分析|Mo’s blog
- OpenStack部署(图文详解)
- 如何让梯形变成平行四边形_把梯形转化成平行四边形.ppt
- SVN commit的时候报错conflicted state
- 假设检验,p-value,glm
- BZOJ3838 : [Pa2013]Raper
- postgresql 修改id的自增起始数
- python矩阵变成图片_Python图片转换成矩阵,矩阵数据转换成图片
- iOS 音视频录制之播放视频,AVPlayer可播放本地视频和在线视频
- PCB电路板原理图中VCC、VDD、VEE、VSS、VBAT各表示什么意思?
- etal中间有空格吗_科学网—英文论文中i.e.,e.g.,etc.,viz.的简要小结 - 贾琼的博文...
- 给谷歌浏览器添加网页翻译插件