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+",");
}
我修改了我的答案,但现在它没有打印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
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);
注意:在显示功能中指定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);
    }
}
说明:primefunction需要两个参数,第一个是必需的,第二个是可选的.如果仅指定了第一个参数,则函数将返回true或false基于数字属于或不属于质数.如果第二个参数被指定为true(或任何其他类型的不同之处undefined和false)函数将返回array由素数的2到n.例如:
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]
小智 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);
        }
    }
你的原始代码有很多缺陷。要实现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();
请注意,这取决于Array.prototype.everyECMAScript 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 ]