快速幂

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

原理:

  以下以求a的b次方来介绍

  把b转换成二进制数
    如:a¹¹ = a^(2º+2¹+2³)
    11的二进制是1011
    11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
    因此,我们将a¹¹转化为算  a^2º × a^2¹ × a^2³
代码比较:
  常规求幂
1 int pow1(inta,intb){
2     int ans=1;
3     while(b--)
4         ans*=a;
5     return ans;
6 } 
View Code

  二分求幂(一般)

 1 int pow2(inta,intb){
 2     int ans=1 , temp=a;
 3     while(b){
 4            if(b%2)
 5             ans*=temp;
 6         temp*=temp;
 7         b/=2;
 8     }
 9     return ans;
10 }
View Code

  快速求幂(位操作)

 1 int pow3(inta,intb){
 2     int ans = 1 , temp = a ;
 3     while(b){
 4         if(b&1)     //b%2 = b&1
 5             ans*=temp;
 6         temp*=temp;
 7         b>>=1;        //b/2 = b>>1 
 8     }
 9     return ans;
10 }
View Code

 

posted @ 2015-10-11 09:25  My_Sunshine  阅读(208)  评论(0编辑  收藏  举报