快速幂总结

参考 http://baike.baidu.com/link?url=iA-pT7GX0fEgeg3Bb3Mk_k2Xt-lgjSoX6nGJKCFDv1JVvHwQGwMnFXRI4VImEf2LMIYnSS3TfWjMZhtGiuD6t_

开始没看懂,后来看了看幂运算的性质,才明白快速幂。


1.幂运算的性质 

m^(a+b) = m^a*m^b


2.快速幂

以a^30 = a^(16+8+4+2) = a^16*a^8*a^4*a^2 为例。

为了求得a^30,只要每次计算时分别乘以a^2,a^4,a^8,a^16即可得到结果,而a^2 = a*a ,a ^4 = a^2 * a^2。 可以看到从30的二进制位最低位开始,

每次向高位移动一位,那么当前的乘数为上一步乘数的平方。因此设初始值为a,每访问到一个二进制位另 a = a * a; 那么就可以得到每一步中的a^n。

当对应的二进制位上为1时,另临时结果乘以a即可。


3.程序流程

public class Solution {
    public double pow(double x, int n) {
        boolean neg = n < 0;
        double result = 1.0;
        for(;n != 0;) {
            if((n&1) == 1) {
                result *= x;
            }
            x *= x;
            n /= 2;
        }
        return neg ? 1 / result : result;
    }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值