为什么我的质数计算器不工作?

Why is my prime number calculator not working?

这是我的代码。如果有人能告诉我哪里出了问题,那真的对我有帮助。性能提示也受到高度赞赏。

顺便说一下,html 只是一个按钮 onclick prime()。

function prime() {
  var teller = 1;
  var n = document.getElementById("a").value;
    document.write("2, ");
  checkPrime(n, 1);    
}

function checkPrime(n, teller) {
  if(isPrime(teller)) {
    document.write(teller + ", ");
  }
  if(teller < n) {
    checkPrime(n, teller = teller + 2);
  }
}

function isPrime(n) {
  var isPrime = true;
  if (n < 2 || n != Math.round(n) ) {
    return false;
  }
  for (var i = 2; i <= Math.sqrt(n); i++) {
    if (n % i == 0) {
      isPrime = false;
    }
  }
  return isPrime;
}

你用模数检查的逻辑似乎是正确的,但 teller 变量对我来说似乎很奇怪。这是一个 fiddle 和你的没有出纳员变量的代码。

 function prime() {
    var teller = 1;
    var n = document.getElementById("a").value;
    checkPrime(n);

}

function checkPrime(n) {
    var primes = isPrime(n);
    if (primes) alert(primes.length + " primes found : " + primes.join())
    else alert("Error");
}

function isPrime(n) {
    var isPrime = true;
    var primeArray = new Array();
    if (n <= 2 || n != Math.round(n)) {
        return false;
    }

    for (var j = 3; j <= n; j++) {
        var primeFound = true;
        for (var i = 2; i <= Math.sqrt(j); i++) {
            if (j % i == 0) {
                primeFound = false;
            }
        }
        if (primeFound) primeArray.push(j);
    }

    return primeArray;
}

虽然这不是最有效的代码。只检查已经找到的素数而不是尝试除以 sqrt(j) 以内的所有整数会更快。