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