[英]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.