我整天都在处理不同的编码挑战,出于某种原因,我坚持认为相对容易的事情。我正在尝试创建一个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;
答案 0 :(得分:-1)
与您的代码相关的一切:
- while (divis = false)
应该是(divis === false)
;
- 你继续循环,直到数组的长度小于素数,这很好。但是你只能在(i == primesqr)`时推它,你只增加它没有余数。
- 也有一些逻辑缺陷。你只检查素数点是否均匀,而不是素数......
我不久前试过这个,这是我的解决方案: (我不排除2)
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();
}