我一直试图通过这么长时间的挑战,尽管在网上阅读了多个解决方案和建议,我似乎无法正确应用它。
指令是“定义一个函数isPrime,它接受一个整数参数,并返回true或false,具体取决于整数是否为素数。”
我尝试了很多东西,但这是我能得到的最远的:
function isPrime(num) {
if (num <= 1) return false;
if (num === 2) return true;
for (var i = 2; i < num; i++)
if (num % i === 0) return false;
else return true;
}
但后来我被告知:“9不是素数。”
任何帮助将不胜感激,谢谢!
答案 0 :(得分:4)
问题在于你的for循环中的else return true;
。
在i
为2的第一次迭代中,在您检查9 % i
不是0之后,执行else
块和return true
。
在所有迭代失败return true
之前,你不应该return false
。
答案 1 :(得分:3)
您应该避免使用else情况,并且仅在for循环完成后返回。虽然可以通过将条件更新为[[0, 0, 0]
[0, 0, 0]
[0, 0, 0]]
来减少循环次数(建议使用 @PatrickRoberts )。
i <= Math.sqrt(num)
仅供参考:在循环的第一次迭代中,您的代码function isPrime(num) {
if (num <= 1) return false;
if (num === 2) return true;
// storing the calculated value would be much
// better than calculating in each iteration
var sqrt = Math.sqrt(num);
for (var i = 2; i <= sqrt; i++)
if (num % i === 0) return false;
return true;
}
(num % i === 0
)将是9 % 2
,它将返回else语句({ {1}})。
答案 2 :(得分:0)
function primeNo(){
//"number1" is "ID" of HTML input block.
var num2 = document.getElementById("number1").value;
var dev = num2 / 2;
var i;
for(i=2; i < dev ; i++){
if(num2%i == 0){
//"ans1" is "ID of <p> where ans needs to display"
document.getElementById("ans1").innerHTML = "Not a Prime No";
break;
}
else{
document.getElementById("ans1").innerHTML = "Prime No";
}
}
}