优化幂运算

转自:http://blog.csdn.net/zhutulang/article/details/7515772

计算一个整数的幂 X^N 的常见算法是使用 N-1 次乘法自乘。然而我们可以找到更好的算法。可以应用这样一种递归算法:如果 N 是偶数,有X^N=X^(N/2) * X^(N/2), 如果 N 是奇数,则有 X^N =X^[(N-1)/2] * X^[(N-1)/2] * X 。

为了说明这个算法为什么更高效,我们举一个例子。例如计算 X62 ,用第一种的常见算法我们要做61次自乘。而用第二种算法只要做9次乘法。

    public long pow(long x, int n) {
        if (n == 0)
            return 1;
        else {
            // 判断n的奇偶
            if (n % 2 == 0)
                return pow(x * x, n / 2);
            else
                return pow(x * x, (n - 1) / 2) * x;
        }
    }

由于取幂运算得到的数可能会很大。我们可以使用 java 的 BigInteger 类,这个类可以用来处理任意大的整数。修改以上代码:

    public BigInteger pow2(BigInteger x, int n) {
        if (n == 0)
            return BigInteger.valueOf(1);
        else {
            if (n % 2 == 0)
                return pow2(x.multiply(x), n / 2);
            else
                return pow2(x.multiply(x), (n - 1) / 2).multiply(x);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值