我正在为基本的 Java 考试练习过去的试卷,我发现很难让 for 循环工作来测试一个数字是否为素数。我不想通过为更大的数字添加效率措施来使它复杂化,只是一些至少适用于 2 位数字的东西。
目前,即使 n 是素数,它也总是返回 false。
我认为我的问题是我在 for 循环本身以及将“返回真”放在哪里时遇到了问题;和“返回错误;”......我确定这是我犯的一个非常基本的错误......
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++)