在m和n都属于正数,并且m的n次方不超过LONG_MAX的情况下,如何求出m的n次方呢?一般都会想到用一个循环,如下
long result = 1;
for (int i = 0; i < n; i++)
result * = m;
【快速幂运算步骤 2的5次方怎么计算】result即为所求,算法复杂度O(n) 。这样也能工作,但是当m和n变大时,效率会相当低下,如何优化呢?考虑2的4次方的情况,其实就是4个2相乘法;有没有看出撒问题呢?是的,重复计算!前二个2相乘的结果可以直接用,后面两个2的相乘不用再计算,即是
2X2X2X2 = 4X4
考虑2的5次方,即5个2相乘的情况,同样的道理
2X2X2X2X2 = 4X4X2
所呈现出来的规律即是
m的n次方,在n为偶数时,可以变成 m的n/2次方的平方;在n为奇数时,则有n - 1为偶数,则变成m的(n-1)/2次方的平方再乘以m, 从n变成n/2,问题规模变小,中间计算结果可重复利用,可用递归解决,其算法复杂度变成O(logn) 。具体代码见下:
运行结果如下
推荐阅读
- 小米11pro快速截图教程 红米note11pro怎么截屏
- 6招快速校正屏幕颜色调白 iphone7颜色怎么调整
- 手机充电越来越慢快速改善方法 手机充电慢了怎么解决
- 电脑快速关闭任务进程的教程 电脑怎样结束运行程序
- 主机开机显示器黑屏的快速解决 电脑开机屏幕不亮怎么办
- 电脑黑屏的快速解决 电脑主机亮屏幕不亮什么原因
- 快速方便清洗茶杯的方法
- iPhone简单快速启动录音方法 苹果手机电话如何录音
- 快速迁移旧手机数据的详细方法 新手机怎么把旧手机的东西导过来
- 解决电脑键盘打不出字的5大招详述 键盘失灵怎么办快速解决