c++入门必学算法之快速幂思想及实现

 更新时间:2022年11月04日 10:43:27   作者:旧林墨烟  
快速幂相较于普通的幂,具有占用空间少,效率更高等优点,全面碾压普通的幂,下面这篇文章主要给大家介绍了关于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++快速幂算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • QT中进程的创建实现

    QT中进程的创建实现

    本文主要介绍了QT中进程的创建实现,详细介绍了创建进程的整个过程,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2023-08-08
  • C语言main函数的三种形式实例详解

    C语言main函数的三种形式实例详解

    这篇文章主要介绍了 C语言main函数的三种形式实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • C++ OpenCV实战之车道检测

    C++ OpenCV实战之车道检测

    这篇文章主要介绍了基于C++ OpenCV实现的车道检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C++中的继承方式与菱形继承解析

    C++中的继承方式与菱形继承解析

    这篇文章主要介绍了C++中的继承方式与菱形继承解析,继承是类和类之间的关系,是代码复用的重要手段,允许在保持原有类结构的基础上进行扩展,创建的新类与原有的类类似,只是多了几个成员变量和成员函数,需要的朋友可以参考下
    2023-08-08
  • C与C++ 无参函数的区别解析

    C与C++ 无参函数的区别解析

    在《C++ 编程思想》:“关于无参函数声明,C与C++有很大的差别。在C语言中,声明int fun1(),意味着一个可以有任意数目和类型的函数;而在C++中,指的却是一个没有参数的函数”
    2013-07-07
  • 浅谈哈希表存储效率一般不超过50%的原因

    浅谈哈希表存储效率一般不超过50%的原因

    下面小编就为大家带来一篇浅谈哈希表存储效率一般不超过50%的原因。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • C语言的变量与常量 字符字符串与转义字符详解

    C语言的变量与常量 字符字符串与转义字符详解

    这篇文章主要介绍了详解C语言的变量与常量 字符字符串与转义字符,包括其之间的区别是C语言入门学习中的基础知识,需要的朋友可以参考下
    2021-10-10
  • 浅谈Qt中使用CEF的几个要点(Windows下)

    浅谈Qt中使用CEF的几个要点(Windows下)

    下面小编就为大家带来一篇浅谈Qt中使用CEF的几个要点(Windows下)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • C++ 点(.)和箭头(->)运算符用法小结

    C++ 点(.)和箭头(->)运算符用法小结

    在C++中,点运算符(.)用于访问类的成员变量和成员函数,而箭头运算符(->)用于通过指针访问类的成员变量和成员函数,本文就来详细的介绍一下如何使用,感兴趣的可以了解一下
    2024-01-01
  • C语言编程实现扫雷游戏

    C语言编程实现扫雷游戏

    这篇文章主要为大家详细介绍了C语言编程实现扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08

最新评论