ahjesus js 快速求幂

/*



    快速幂计算,传统计算方式如果幂次是100就要循环100遍求值



    快速幂计算只需要循环7次即可



    求x的y次方 x^y可以做如下分解



    把y转换为2进制,设第n位的值为i,计算第n位的权为x^(2^(n-1)*i)



    例如2^12



    12的二进制是1100



    12=2^3*1+2^2*1+2^1*0+2^0*0



    因此2^12=2^(2^3+2^2)



    分解得到2^12=2^(2^3)*2^(2^2)



    */



    function myPow(dx, dy) {



        var r = 1;



        while (dy != 0) {



            var b = dy & 1; //取最末尾的一位数,也可以判断奇偶数,奇数:1,偶数:0



            if (b) {//如果最末尾的数是1,储存有效值



                r *= dx;



            }



            dx *= dx; //这里即完成了x^(2^(n-1)*i)的计算



            dy >>= 1; //右位移去掉末尾1位,也可以看成是除以2取整数



        }



        return r;



    }
      更详尽的可以参考

http://www.cnblogs.com/yan-boy/archive/2012/11/29/2795294.html

原文地址:https://www.cnblogs.com/ahjesus/p/3261320.html