繁体   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