[英]Why does my program think 4 is a prime number?
知道为什么该方法对'4'返回true?
private boolean isPrime(int num) {
if (num < 2) {
return false;
}
for (int i = 2; i < num / 2; i++) {
if (num % i == 0)
return false;
}
return true;
}
它返回true,因为循环从2
开始并以num / 2 -1
结束,在num = 4
的情况下为1
。 这意味着您永远不会进入for循环。
您的for
循环应为
for (int i = 2; i <= num/2; i++)
请注意,循环的运行时间为O(num)
。 为了提高效率,您可能需要考虑循环
for (int i = 2; i * i <= num; i++)
这是O(sqrt(num))
。
一种更有效的解决方案是检查2,后跟奇数直到sqrt(n),因为任何高于此数的数字都必须意味着存在小于此的因子。
static boolean isPrime(long num) {
if (num < 2) return false;
if (num == 2) return true;
if ((num & 1) == 0) return false; // must be even
for (int i = 3, max = (int) Math.sqrt(num); i <= max; i += 2)
if (num % i == 0)
return false;
return true;
}
由于控制从未进入for
循环,因此返回true
。
for(int i = 2; i < num / 2; i++) { ... }
这里num
是4
那么num / 2
将是2
for(int i = 2; i < 2; i++) { ... }
最初,我是2,且不小于2。因此, i < 2
将给出假。
因此,循环永远不会运行。 并且函数将返回true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.