关于使用BigInteger计算大数的整数到n次幂的方法

时间:2015-11-03 04:51:11

标签: java

书中的问题: 许多加密技术依赖于将大整数提升到整数幂的能力。这是一种实现整数取幂的(合理)快速技术的方法:

public static int pow(int x, int n) { 
    if (n == 0){
        return 1;
    }
    int t = pow(x, n/2);
    // find x to the n/2 recursively
    // if n is even, the result is t squared 
    // if n is odd, the result is t squared times x
    if (n%2 == 0){ 
        return t*t; 
    } else { 
        return t*t*x; 
    }
} 

这种方法的问题在于它仅在结果小于20亿时才有效。重写它以便结果是BigInteger。但是,参数应该仍然是整数。

  

您可以使用BigInteger方法添加和乘法,但不要使用pow,这会破坏乐趣。

这个方法,我并不关心它是如何工作的,但是"箭头"部分是我困惑的部分。它说'不要使用pow。"那是什么意思?他们为您提供了方法,并告诉您实施BigInteger,但它是什么意思"不使用pow?"有谁知道吗?

1 个答案:

答案 0 :(得分:0)

在java.math.BigInteger对象中有一个方法pow。

java.math.BigInteger pow(int)

使用此方法,您可以计算任何数字的功效。

在您的示例中,我们可以使用BigInteger将函数编写为

PARTITIONing

现在使用pow内置功能。我认为该声明意味着您应该使用不同的方法提供该流程的替代实现,例如

import java.math.BigInteger;
public static BigInteger power(int a,int b){
BigInteger b1 = new BigInteger(Integer.toString());
b1 = b1.pow(b);
return b1;//returns a^b
}