快速幂算法

常规求幂

[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. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值