首页 > 其他 > 详细

快速幂

时间:2015-10-11 10:06:34      阅读:256      评论:0      收藏:0      [点我收藏+]

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

原理:

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

  把b转换成二进制数
    如:技术分享 = 技术分享
    11的二进制是1011
    11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
    因此,我们将a¹¹转化为算  技术分享
代码比较:
  常规求幂
技术分享
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

 

快速幂

原文:http://www.cnblogs.com/My-Sunshine/p/4868786.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!