2016-05-18 4 views
1

Or Booleanステートメントを介してプライムであるかどうかをチェックすると、チェックが完了せず、配列全体が返されます。またはループ内のIfステートメント内のブール式

function sumPrimes(num) { 
    var arr = []; 

    var prime; 
    for(var i = 1; i <=num; i++){ 
    if(i%2 !== 0 || i%3 !== 0 || i%5 !== 0){ 
    arr.push(i); 
    } 
    } 
    return arr; 
} 

sumPrimes(10); 

答えて

1

したいロジックは

if (i%2 !== 0 && i%3 !== 0 && i%5 !== 0) // not divisible by 2 and not divisible by 3 
             // and not divisible by 5 

または

if (!(i%2 === 0 || i%3 === 0 || i%5 === 0)) // not divisible by 2 or 3 or 5 

のいずれかであるそしてもちろん、あなたは48

1

までの素数のために、この唯一の作品、私がいることを考慮する必要がありますあなたは"get prime numbers algorithm"を次のように取得することをお勧めします:

function getPrimes(max) { 
    var sieve = [], i, j, primes = []; 
    for (i = 2; i <= max; ++i) { 
     if (!sieve[i]) { 
      // i has not been marked -- it is prime 
      primes.push(i); 
      for (j = i << 1; j <= max; j += i) { 
       sieve[j] = true; 
      } 
     } 
    } 
    return primes; 
} 

そして

var sumPrimes = function(num) { 
    var primes = getPrimes(num) 
    var sum = primes.reduce(function(sum, prime) { 
    return sum + prime 
    }, 0) 
} 
を減らす使用してそれをまとめます
関連する問題