【问题标题】:Or Boolean Expression within the If Statement within a loop或循环内 If 语句中的布尔表达式
【发布时间】:2026-02-16 11:40:02
【问题描述】:

当我通过 Or Boolean 语句检查数字是否为素数时,它没有完成检查,而是返回整个数组。

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);

【问题讨论】:

    标签: javascript arrays if-statement boolean boolean-logic


    【解决方案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;
    }
    

    然后用 reduce 来总结

    var sumPrimes = function(num) {
      var primes = getPrimes(num)
      var sum = primes.reduce(function(sum, prime) {
        return sum + prime
      }, 0)
    }
    

    【讨论】:

      【解决方案2】:

      你想要的逻辑是要么

      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 的素数。

      【讨论】: