非常简单的素数测试-我认为我不了解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++)