午夜稻草人

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

快速幂运算顾名思义,就是快速算某个数的多少次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。

以下以求a的b次方来介绍
把b转换成二进制数。
该二进制数第i位的权为2i-1
例如
a11 =a20+21+23
11的二进制是1011
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
因此,我们将a¹¹转化为a20*a21*a23
 
代码如下
int pow3(int a,int b)
{ 
    int r=1, base=a; 
    while(b!=0) 
    { 
        if(b&1) 
            r*=base; 
        base*=base; 
        b>>=1; 
    } 
  return r; 
}

 

posted on 2015-06-10 17:15  午夜稻草人  阅读(236)  评论(0编辑  收藏  举报