【问题标题】:How to find if any element within an array is different than 2, 3 and 5 in JavaScript?如何查找数组中的任何元素是否与 JavaScript 中的 2、3 和 5 不同?
【发布时间】:2025-12-25 15:05:10
【问题描述】:

目标是判断输入的数字是否是汉明数?!汉明数是所有分解后仅包含素数 2、3 和 5 的数字。如果分解后的数字包含与 2、3 和 5 中的任何一个不同的任何数字,则不是汉明数。所以我找到了如何分解每个输入的数字,并且因子形成了一个数组。我想设置条件是否有任何因素不同于 2、3 或 5,以便能够从潜在的汉明数列表中排除这些数字!

将每个数分解为素因数的代码是:

function getAllFactorsFor(remainder) {
    var factors = [], i;

    for (i = 2; i <= remainder; i++) {
        while ((remainder % i) === 0) {
            factors.push(i);
            remainder /= i;
        }
    }

    return factors;
}

现在我需要设置条件以从这个新形成的数组中排除所有包含任何不同于 2、3 和 5 的素因数的数字!

【问题讨论】:

  • 您可以使用array.filter 在返回数组之前删除任何不符合您条件的数字。 array.filter

标签: javascript arrays any hamming-numbers


【解决方案1】:

您可以使用every 命令检查所有需要的因素是否存在:

function getAllFactorsFor(remainder) {
    var factors = [], i;

    for (i = 2; i <= remainder; i++) {
        while ((remainder % i) === 0) {
            factors.push(i);
            remainder /= i;
        }
    }

    return factors;
}

for(let i = 0; i < 20; i++) {
  if(getAllFactorsFor(i).every(f => [2, 3, 5].includes(f))) 
    console.log(`${i} is a Hamming number`);
  else
    console.log(`${i} is not a Hamming number`);
}

【讨论】:

    【解决方案2】:

    您可以将Array.filterArray.every 一起使用,例如:

    const output = factors.filter(factor => [2,3,5].every(num => num !== factor))
    

    【讨论】:

      【解决方案3】:

      您可以使用.some(),或更准确地说是!f.some(x =&gt; x &gt; 5),或者在文本中:如果没有发现大于5 的因子,则为true。

      function getAllFactorsFor(remainder) {
        var factors = [], i;
      
        for (i = 2; i <= remainder; i++) {
          while ((remainder % i) === 0) {
            factors.push(i);
            remainder /= i;
          }
        }
        return factors;
      }
      
      for (var num = 30; num <= 40; num++) {
        var f = getAllFactorsFor(num);
        console.log(num + " has factors: " + f.toString() + ". Hamming number: " + !f.some(x => x > 5))
      }

      【讨论】:

        【解决方案4】:

        我结合了不同的建议并在谷歌上搜索并来到我的解决方案版本以检查输入的数字是否为汉明数:

        代码:

        function getAllFactorsFor(remainder) {
            var factors = [], i;
        
            for (i = 2; i <= remainder; i++) {
                while ((remainder % i) === 0) {
                    factors.push(i);
                    remainder /= i;
                }
            }
        
            return factors;
        }
        
        function isHamming(remainder){
            if(getAllFactorsFor(remainder).every(f => [2, 3, 5].includes(f))){
                return true;
            }else{
                return false;
            }
        }
        

        【讨论】:

          最近更新 更多