书中的问题: 许多加密技术依赖于将大整数提升到整数幂的能力。这是一种实现整数取幂的(合理)快速技术的方法:
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?"有谁知道吗?
答案 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
}