计算a^n的三种对数复杂度算法

1.递归解决
a^n= (a ^(n/2)) ^2 ,n为偶数
a^n= (a ^((n-1)/2)) ^2*a,n为奇数
n==0时返回

2和3用n的二进制表示来说明

2.从左向右
假设n=13,即1101
下面是求a的幂的步骤:
0->1->10->11->110->1100->1101
每次个位+1是*a,后面添0是平方。

3.从右向左(快速幂)

1101每一位表示的是a^8 a^4 a^2 a^1
位置上是1就乘上,位置是0则跳过这一位
可以设置一个temp=a,每移动一位,temp=temp*temp

第一种方法和第二种方法我比较惊奇,而第三种比较常用的我觉得很简单,因为这就是二进制表示嘛,很正常。

猜你喜欢

转载自blog.csdn.net/weixin_41677899/article/details/84566665