【发布时间】:2016-06-21 17:51:41
【问题描述】:
我是初学者,正在尝试完成质数测试,但遇到了问题。这是我所拥有的:
var n = Number(prompt("Input the number you want to check for prime:"));
var i;
if (n < 2) {
alert(n + " is not a prime number.");
}
for (var i = 2; i <= Math.sqrt(n); i++) {
if (n % i === 0) {
alert(n + " is not a prime number.");
break;
}
else {
alert(n + " is a prime number.");
break;
}
}
它运行正常,但如果我输入 3 或 2 并不会弹出警报,并且任何带有 3 的数字即使不是质数,它也会作为质数返回。除此之外,我的所有测试都有效。
【问题讨论】:
-
2 和 3 都是素数,问题在于您构建循环的方式。自从您也闯入 else 以来,它第一次就脱离了循环。相反,应该发生的是最终语句应该在循环之外。您还必须完全退出检查,所以我建议a)将其包装为一个函数,以便您可以
return,或b)设置一个标志而不是立即警报,所以isPrime = true; break;,然后再检查如果isPrime === true. -
那是因为当您宣布
n是素数时,您还没有测试所有除数。
标签: javascript for-loop