需要在JavaScript中生成素数

Nil*_*ilR 3 javascript jscript

我正在编写一个JavaScript来生成从2到100的素数.但它不起作用,无法弄明白.

你能帮我吗?

var array = new Array(100);

for (var i=2 ; i<=array.length-1; i++) {
    if((i%2===0) || (i%3===0))
        continue;
    document.writeln(i+",");
}
Run Code Online (Sandbox Code Playgroud)

我修改了我的答案,但现在它没有打印2和3; 我怎样才能包括2&3 ...结果是:

5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 35, 37, 41, 43, 47, 49, 53, 55, 59, 61, 65, 67, 71, 73, 77, 79, 83, 85, 89, 91, 95, 97

nan*_*ash 8

function isPrime(num) {
    for ( var i = 2; i < num; i++ ) {
        if ( num % i === 0 ) {
            return false;
        }
    }
    return true;
}

function display(n) {
    var arr = [2];
    for ( var i = 3; i < n; i+=2 ) {
        if ( isPrime(i) ) {
            arr.push(i);
        }
    }
    console.log(arr); // use arr result on your own
}

display(100);
Run Code Online (Sandbox Code Playgroud)

注意:显示功能中指定n参数并获得从2到n的素数...

看看JSFiddle

更新:请注意上面的脚本是正确的,我要离开它,虽然添加了相同的功能,另外还有一个功能:

function prime(n,flag) {
    ( typeof flag === "undefined" || flag === false ) ? flag = false : flag = true;

    function isPrime(num) {
        if ( num === 0 || num === 1 ) {
            return false;
        }
        for ( var i = 2; i < num; i++ ) {
            if ( num % i === 0 ) {
                return false;
            }
        }
        return true;
    }

    if ( flag ) {
        var arr = [2];
        for ( var i = 3; i <= n; i+=2 ) {
            if ( isPrime(i) ) {
                arr.push(i);
            }
        }
        return arr;
    } else {
        return isPrime(n);
    }
}
Run Code Online (Sandbox Code Playgroud)

说明:primefunction需要两个参数,第一个是必需的,第二个是可选的.如果仅指定了第一个参数,则函数将返回truefalse基于数字属于或不属于质数.如果第二个参数被指定为true(或任何其他类型的不同之处undefinedfalse)函数将返回array由素数的2n.例如:

console.log(prime(2)); // returns true ( 2 is prime )
console.log(prime(8)); // returns false ( 8 isn't prime )

console.log(prime(100,true)); // returns [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
Run Code Online (Sandbox Code Playgroud)

  • 您的解决方案效率很低.显示循环最好从3开始并递增2并且isPrime只需要除以素数. (3认同)
  • 你只需要检查`num`的平方根. (2认同)

小智 8

var enterNumber = prompt("Enter number: ");

for(var i=2; i<=enterNumber ;i++){

        var isPrime = true;

        for(var j=2; j<i; j++){
            if(i%j === 0 && i !== j){
                isPrime = false;
            }
        }
        if(isPrime === true){
            console.log(i);
        }
    }
Run Code Online (Sandbox Code Playgroud)


p.s*_*w.g 5

你的原始代码有很多缺陷。要实现Eratosthenes 筛分法,您需要将找到的每个素数添加到数组中,然后针对您目前找到的每个素数测试下一个候选素数。如果候选者不能被数组中的任何素数整除,那么它就是素数,您可以将它添加到素数数组中。

这是一个工作版本(演示):

function start() {    
    var array = [2, 3];
    for (var i = 5; i <= 100; i += 2) {
        if (array.every(function(p) { return i % p; })) {
            array.push(i);
        }
    }
    var result = array.join(",");
    document.getElementById("output").innerHTML = result;
}
start();
Run Code Online (Sandbox Code Playgroud)

请注意,这取决于Array.prototype.everyECMAScript 5 中引入的内容。


Ale*_*aru 5

使用javascript生成器的版本:

function* take(length, iterable) {
  for (let x of iterable) {
    if (length <= 0) return;
    length--;
    yield x;
  }
}

function* primes() {
  let n = 2;

  while (true) {
    if (isPrime(n)) yield n;
    n++;
  }

  function isPrime(num) {
    for (var i = 2; i <= Math.sqrt(num); i++) {
      if (num % i === 0) {
        return false;
      }
    }
    return true;
  }
}

console.log([...take(4, primes())]); //[ 2, 3, 5, 7 ]
Run Code Online (Sandbox Code Playgroud)