Javascript素数检查

时间:2016-07-28 18:09:38

标签: javascript

我一直试图通过这么长时间的挑战,尽管在网上阅读了多个解决方案和建议,我似乎无法正确应用它。

指令是“定义一个函数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不是素数。”

任何帮助将不胜感激,谢谢!

3 个答案:

答案 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";
    }
 }

}