2016-05-18 77 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) 
} 
總結說起來