非常简单的素数测试-我认为我不了解for循环


问题内容

我正在为基本的Java考试练习过往的试卷,并且发现很难使for循环工作来测试数字是否为质数。我不想通过为较大的数字添加效率度量来使其复杂化,而只是至少对于2位数的数字有效。

此刻,即使n是质数,它始终返回false。

我认为我的问题是,for循环本身以及将“ return true”放置在何处都会出错。和“返回假;” …我确定这是我犯的一个非常基本的错误…

public boolean isPrime(int n) {
    int i;
    for (i = 2; i <= n; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

我无法在其他地方找到有关stackoverflow的原因,是因为类似的问题正在要求更复杂的实现以具有更有效的实现方式。


问题答案:

您的for循环有一个小问题。它应该是: -

for (i = 2; i < n; i++)  // replace `i <= n` with `i < n`

当然,您不希望n除以时的余数n。它会永远给你1

实际上,您甚至可以通过将条件更改为-来减少迭代次数i <= n / 2。由于n不能除以大于的数字n / 2,除非我们考虑n,否则我们根本不必考虑。

因此,您可以将for循环更改为:-

for (i = 2; i <= n / 2; i++)