Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript素数搜索无限递归_Javascript - Fatal编程技术网

JavaScript素数搜索无限递归

JavaScript素数搜索无限递归,javascript,Javascript,我整天都在应对不同的编码挑战,出于某种原因,我一直在做一些我认为相对容易的事情。我正在尝试创建一个JS函数,它以一个数字作为输入,并发现第n个素数(e.x.primesearch(4)将给出11,因为它是第4个素数[不包括2])。我已经试着调试了好几个小时了,我似乎陷入了一个无限循环中,我嵌套的while循环中的某些东西不起作用,我不知道为什么。如果你能看一看,我会很感激的……我假设我遗漏了一些明显的东西,或者我的逻辑完全错了 如果不清楚,primepoint是检查素数时递增的指针,primes

我整天都在应对不同的编码挑战,出于某种原因,我一直在做一些我认为相对容易的事情。我正在尝试创建一个JS函数,它以一个数字作为输入,并发现第n个素数(e.x.primesearch(4)将给出11,因为它是第4个素数[不包括2])。我已经试着调试了好几个小时了,我似乎陷入了一个无限循环中,我嵌套的while循环中的某些东西不起作用,我不知道为什么。如果你能看一看,我会很感激的……我假设我遗漏了一些明显的东西,或者我的逻辑完全错了

如果不清楚,primepoint是检查素数时递增的指针,primesqr是primepoint的平方根(因为这是需要检查的最高值),primearray是存储素数的位置

谢谢

//正在检查的号码
var-primepoint=2;
//正在检查的编号的Sqr
var primesqr=0;
//主存储器阵列
变量primearray=[0];
//第n个值的素数搜索函数
var primesearch=函数(第n个){
var n=n;

而(primearray.length代码中有几点: -
while(divis=false)
应该是while
(divis==false)

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

-也有一些逻辑上的缺陷。你只需要检查质点是否是偶数,而不是质点

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

功能测试仪(n){
如果(n==2){
返回true;
}
如果(n<2 | | n%2==0){
返回false;
}

for(var i=3;我在Chrome调试器中单步执行代码。
var nth=nth;
是多余的,因为nth是通过包含在参数列表中作为局部变量创建的,就像它被声明一样。
而(divis=false)
是一个赋值,而不是一个相等测试(并且总是计算为
false
).RobG我可以用==而不是==来解决这个问题吗?条件运算符总是
==,==,=,>,编辑了我的答案,在提交之前应该已经做过这方面的工作,谢谢。我会研究你的提示,看看我是否能解决它。谢谢你的帮助,Jordan!
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();
}