【发布时间】:2015-11-03 19:43:08
【问题描述】:
书中的问题: 许多加密技术依赖于将大整数提高到整数幂的能力。这是一种实现整数求幂的(合理的)快速技术的方法:
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”是什么意思?有人知道吗?
【问题讨论】:
-
这意味着不要使用为
BigInteger定义的pow。也就是说,不要使用this。示例代码显示了一个递归调用自身的pow方法。您可以使用BigInteger方法编写相同的东西。当然,如果你调用方法pow你仍然可以递归使用它。你不能使用BigInteger.pow。 -
所以.. 我不太明白。这是否意味着更改整个 pow 方法,使其默认使用 BigInteger 对象而不是使用 BigInteger.pow?我不确定第二个是做什么的。这是java库中的方法之一还是pow指的是作者创建的pow?
-
仅供参考,该技术称为平方求幂,它将所需的乘法次数从 n 减少到 lg N
-
我的意思是,更改整个
pow方法,使其使用BigInteger而不是int。这就是我认为他们正在寻找的东西。是的,BigInteger.pow是 Java 库中的方法之一,您不应该使用它。如果您使用它,整个代码将只是没有算法的一行,但他们试图让您使用BigInteger重写算法。并且告诉导师下次不要调用自己的方法pow,因为和库方法同名,所以比较混乱。 -
pow无论如何都是一个糟糕的名字。它让我想起卡通暴力而不是求幂。
标签: java