快速幂详解

快速幂,顾名思义,快速求幂。

a^b:朴素算法,即b个a相乘    时间复杂度O(n)

快速幂,       时间复杂度O(logn)

代码:

int Qpow(int a,int b){
    int ans=1;
    while(b!=0){
        if(b&1!=0){ans*=a;}
        a*=a;
        b>>=1;
  }
    return ans;
}
原理:把b转化为二进制,该二进制第i位的值为2^(i-1),所以a对应 b的每一位值的幂是前一位值的幂的平方

 即      第1位的权      a^1

  第2位的权 a^2

  第3位的权 a^4

……

例:7的二进制111,a^7 =(a^(2^0)) * (a^(2^1)) * (a^(2^2))=(a^1) * (a^2) * a(a^4)

      10的二进制1010,a^10=(a^(2^1)) * (a^(2^3))=(a^2) * (a^8)

这样就可以从最低位开始处理了,

最低位为1,ans*=a;

最低位为0,不做处理。

b右移一位,a*=a;//维持a对应相应二进制位数的值。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值