JavaScript Prime数字搜索无限递归

时间:2016-05-16 00:24:49

标签: javascript

我整天都在处理不同的编码挑战,出于某种原因,我坚持认为相对容易的事情。我正在尝试创建一个JS函数,它接受一个数字作为输入并找到第n个素数(e.x. primesearch(4)会给你11,因为它是第4个素数[不包括2])。我现在一直试图调试几个小时,我似乎陷入了一个无限循环,我嵌套的while循环中的某些东西不起作用,我无法弄清楚原因。如果你能看一眼,我会很感激......我假设有一些显而易见的东西我可能已经失踪,或者我的逻辑可能完全没有了。

如果不清楚,在检查素数时,primepoint是指针增加的指针,primesqr是素数的平方根(因为那是你需要检查的最高值)和primearray是素数存储的地方。

谢谢!



//Number being checked
var primepoint = 2;
//Sqr of number being checked
var primesqr = 0;
//Array for prime storage
var primearray = [0];
//Function for prime search at nth value
var primesearch = function(nth) {
  var nth = nth;
  while (primearray.length <= nth + 1) {
    primesqr = Math.sqrt(primepoint)
    if (primepoint % 2 != 0) {
      console.log("entered if")
      var divis = false;
      while (divis = false) {
        for (i = 2; i <= primesqr; i++) {
          if (primepoint % i == 0) {
            primepoint++;
            divis = true;
          } else if (i == primesqr) {
            primearray.push(primepoint);
            console.log("prime found")
            primepoint++;
            divis = true;
          }
        }
      }

    } else {
      primepoint++;
    }
    console.log(primepoint)
  }
}
primesearch(4)
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:-1)

与您的代码相关的一切: - while (divis = false)应该是(divis === false);

- 你继续循环,直到数组的长度小于素数,这很好。但是你只能在(i == primesqr)`时推它,你只增加它没有余数。

- 也有一些逻辑缺陷。你只检查素数点是否均匀,而不是素数......

我不久前试过这个,这是我的解决方案: (我不排除2)

Working Example

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

function n(num) {
  var arr = [];
  var j = 2;
  while (arr.length < num) {
    if (primeTester(j)) {
      arr.push(j);
    }
    j++;
  }
  return arr.pop();
}