快速幂算法

来源:互联网 发布:小米双卡网络切换 编辑:程序博客网 时间:2024/06/03 18:09

常规求幂

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. int pow1(int a,int b)  
  2. {  
  3.     int r=1;  
  4.     while(b--)  
  5.         r*=a;  
  6.     return r;  
  7. }   

二分求幂(一般)

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. int pow2(int a,int b)  
  2. {  
  3. int r=1,base=a;  
  4. while(b!=0)  
  5. {  
  6.     if(b%2)  
  7.         r*=base;  
  8.     base*=base;  
  9.     b/=2;  
  10. }  
  11. return r;  
  12. }  

二分求幂(位操作,同pow2)

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. int pow4(int a,int b)  
  2. {  
  3.     int r=1,base=a;  
  4.     while(b!=0)  
  5.     {  
  6.         if(b&1)  
  7.             r*=base;  
  8.         base*=base;  
  9.         b>>=1;  
  10.     }  
  11.     return r;  
  12. }  


快速求幂(位运算,更复杂)

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. int pow3(int x,int n)  
  2. {  
  3.     if(n==0) return 1;  
  4.     else  
  5.     {  
  6.         while((n&1)==0)  
  7.         {  
  8.             n>>=1;  
  9.             x*=x;  
  10.         }  
  11.     }  
  12.     int result=x;  
  13.     n>>=1;  
  14.     while(n!=0)  
  15.     {  
  16.         x*=x;  
  17.     if((n&1)!=0)  
  18.         result*=x;  
  19.     n>>=1;  
  20.     }  
  21.     return result;  
  22. }  
0 0
原创粉丝点击