实现快速幂和快速求次方算法

易语言 2020-05-21 17:41:16

它的原理如下:
  假设我们要求a^b,那么其实b是可以拆成二进制的,该二进制数第i位的权为2^(i-1),例如当b==11时
                           a11=a(2^0+2^1+2^3)
  11的二进制是1011,11 = 23×1 + 22×0 + 21×1 + 2o×1,因此,我们将a11转化为算 a2^0*a2^1*a2^3,也就是a1*a2*a8 ,看出来快的多了吧原来算11次,现在算三次
C/C++实现代码如下:
int poww(int a,int b){
int ans=1,base=a;
while(b!=0){
if(b&1!=0)
  ans*=base;
base*=base;
b>>=1;
  }
return ans;
}