我制作了以下代码来生成一个素数数组,直到一个数字' num'。 但它给出了意想不到的结果。 我尝试在chrome上调试它,但调试器没有多大帮助,因为它只是跳过第4行。
function Sieve(num) {
var arr = Array.from({length:num-1}).map((x,i)=> i+2);
var numb = Math.floor(Math.sqrt(num));
var arra = Array.from({length:numb-1}).map((x,i)=> i+2);
arra.forEach(x => arr = arr.filter(y => ((y%x)!==0)||(y=!x)));
console.log(arr);
}
Sieve(10)

答案 0 :(得分:2)
这应该是Eratosthenes算法的筛选吗?只是要提一下,你知道这不是生成质数的最快方法吗?
确认Bersteins's primegen的速度更快,而且解决方案可能更快。
除此之外,让我们为您要实现的目标显示简单的代码:
Array.from(new Array(n-1), (x,i) => i+2);
这更易于理解和分割。
顺便说一句,你知道array.from()
有效吗?不需要.map()
然后function Sieve(num) {
var arra = Array.from(new Array(num-1), (x,i) => i+2);
var comb = Array.from(new Array(Math.sqrt(num)-1), (x,i) => 2+i);
comb.forEach(x => arra=arra.filter(y => (y%x !== 0) || (y===x) ));
console.log(arra);
}
Sieve(100);
,您可以将map函数直接传递给from作为参数。使用新的Array(n)代码也更具可读性。
这是使用您的原则的解决方案。
form.addEventListener('submit', function(e){
var errors = "";
if(valName.value !== ''){
valName.nextElementSibling.textContent = '';
valName.className = '';
}
else{
e.preventDefault();
errors += errorMessages[0];
}
if(valEmail.value.indexOf('@') != -1 && this.value.indexOf('.') != -1){
valEmail.nextElementSibling.textContent = '';
valEmail.className = '';
}else{
e.preventDefault();
errors += errorMessages[1];
}
if(errors !== ""){
valName.className = 'errorborder';
valName.nextElementSibling.textContent = errors.
return false;
}
})
自JSFiddle破解以来,它就在CodePen上。 labda solution to Erathostene's sieve