码迷,mamicode.com
首页 > 其他好文 > 详细

快速幂 (二进制)这个好像一般不会爆掉!!

时间:2018-12-01 15:07:25      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:忽略   就是   pow   进制   color   快速   语句   等于   bsp   

int poww(int a, int b) {
   int ans = 1, base = a;

    while (b != 0) {       //如果b的所有位都被踢掉 也就是b不存在了 那么就没有指数了 就算不出下去了 也没有可以算得了 也不需要算了 就可以跳出循环
         if (b & 1 != 0)    //判断b的二进制的最后一位是否1 如果b & 1 != 0  也就是b(二进制)的最后一位等于1(不等于0) b此时是奇数

            ans *= base;  //(在if语句中的 )如果指数是奇数的话 ((((看下面)))))
            base *= base; // 这步相当于让a指数变成(2^权)
           
b >>= 1;          //把b(二进制)的最后一位踢掉(在就不存在了)

    }
     return ans;
 }

 

 

以2的11次方为例

2^11

  11的二进制为1101

  所以11=1*2^3 + 1*2^2 + 0*2*1 + 1*2^0      

  a^11=a^(1*2^3 + 1*2^2 + 0*2*1 + 1*2^0)

     =a^(1*2^3)   *   a^(1*2^2)  *   a^(0*2*1)   *  a^(1*2^0)

if (b & 1 != 0)    一步步判断b的二进制的每一位  如果是零 即指数为0*~~ 0乘任何数肯定等于0了啊  所以某一位一旦指数等于0 就可以相当于那一步乘法因数是1 就完全可以忽略它了

 

快速幂 (二进制)这个好像一般不会爆掉!!

标签:忽略   就是   pow   进制   color   快速   语句   等于   bsp   

原文地址:https://www.cnblogs.com/darlingroot/p/10048923.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!