簡體   English   中英

為什么我的程序為什么認為4是質數?

[英]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++) { ... }

這里num4那么num / 2將是2

for(int i = 2; i < 2; i++) { ... }

最初,我是2,且不小於2。因此, i < 2將給出假。
因此,循環永遠不會運行。 並且函數將返回true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM