考虑以下代码:
public static boolean isPrime(int n) {
for (int i = 2; i * i <= n; i++)
if (n % i == 0) return false;
return n > 1;
}
public static int squareOf(int n) {
int i = 0;
while (i * i < n)
i++;
return i * i == n ? i: -1;
}
自(46340)(46340)
然后我期望的是,对于大于(46340)*(46340)的数字,isPrime要么不会终止,要么最终会终止,但会给出一些随机答案。
对于每个单个
为什么会发生?
在squareOf中,我们有i * i 对于范围[(46 340)^ 2 +1,2147483641]:正确,除了:{2147402577,2147465721,2147469348,
2147478505、2147481513、2147481513、2147482825、2147482929、2147483280、2147483536、2147483556、2147483609、2147483620、2147483641} [2147483642,Integer.MAX_VALUE]:它似乎没有终止。 为什么会为很多值给出正确答案? 关于给出错误答案的值的特殊之处是什么? 为什么对于2147483641之后的值不终止?