以下代码正确确定数字是否为素数:
var num = parseInt(prompt("Number:"));
var ans = "prime";
for (var i = 2; i < num; i++) {
if (num % i === 0) {
ans = "not prime";
break;
}
}
alert(ans);
为什么此代码适用于输入“2”?
我认为2的输入会给出“不是素数”,因为2%2 === 0就是真的。
答案 0 :(得分:8)
我认为2的输入会给出“不是素数”,因为2%2 === 0就是真的。
2 % 2
永远不会发生。
检查可分割数字的循环是:
for (var i = 2; i < num;...
i
从2
开始,num
是用户输入。
如果num
也 2
,那么i < num
的第一次测试是2 < 2
,这是假的。循环永远不会执行,ans
仍然是“素数”。
答案 1 :(得分:1)
魔法似乎处于循环状态:
for (var i = 2; i < num; i++)
如果输入2,则不满足条件i<num
,因此不执行正文。
但是。如果您使用1作为您的值,它也将返回'prime'。或者,如果输入0或负值。如果给定的数字是否为素数,则可能更好,不仅仅是通过检查某组数字 - 或者至少进行一些输入验证。
当然,如果主要练习只是用循环练习,他的代码就可以了。
HTH jesterchen