c++入门必学算法之快速幂思想及实现
作者:旧林墨烟
快速幂相较于普通的幂,具有占用空间少,效率更高等优点,全面碾压普通的幂,下面这篇文章主要给大家介绍了关于c++入门必学算法之快速幂思想及实现的相关资料,需要的朋友可以参考下
一、什么是快速幂
快速幂算法是用来快速计算指数表达式的值的,例如 210000000,普通的计算方法 2*2*2*2…乘10000000次,如果一个数字的计算都要计算那么多次的话,那么这个程序一定是失败的。
学完快速幂之后就可以用几十次计算求出答案了
二、快速幂思想及实现
快速幂思想其实很简单,就是公式的转换
1、当指数是偶数时,我们可以让指数除以2,底数乘以底数
2、当指数是奇数时,我们可以将指数变为奇数
例如 210
- 指数是偶数,210 = 45
- 指数是奇数,45 = 4 * 44
- 指数是偶数, 4 * 44 = 4 * 162
- 指数是偶数,4 * 162 = 4 * 2561
- 指数是奇数, 4 * 2561=4 * 256 * 2560
- 指数为0时停止,那么答案就是计算 4 * 256 = 1024
下面代码就是模拟这个过程:
#include<iostream>//c++标准头文件,可以使用cout,cin等标准库函数 using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,stack,map,set,vector,queue时都要使用 long long fpow(long long a,long long b){//a是底数,b是指数 long long ans=1;//初始化答案为1 while(b){//当指数不为0时执行 if(b%2==0){//指数为偶数时,指数除以2,底数乘以2 b/=2; a*=a; }else{//指数为奇数时,分离指数,ans乘以底数 ans*=a; b--; } } return ans;//ans就是答案 } int main(){ long long n,m; cin>>n>>m; cout<<fpow(n,m)<<endl; }
3、快速幂精简模板
#include<iostream> using namespace std; long long fpow(long long a,long long b){ long long ans=1; while(b){ if(b&1)ans*=a; b>>=1; a*=a; } return ans; } int main(){ long long n,m; cin>>n>>m; cout<<fpow(n,m)<<endl; }
总结
到此这篇关于c++入门必学算法之快速幂思想及实现的文章就介绍到这了,更多相关c++快速幂算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!