用于生成不起作用的素数的程序

时间:2017-12-19 10:14:37

标签: javascript primes sieve-of-eratosthenes

我制作了以下代码来生成一个素数数组,直到一个数字' 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)




1 个答案:

答案 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