为什么我的素数计算器不起作用?

时间:2015-06-01 15:37:27

标签: javascript calculator

这是我的代码。如果有人能告诉我什么是错的话,这对我有帮助。而且性能提示也受到高度赞赏。

顺便说一句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;
}

1 个答案:

答案 0 :(得分:0)

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

的代码
 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)之前的所有整数来检查更快。