如何查找数组中的任何元素是否不同于 JavaScript 中的 2、3 和 5?

How to find if any element within an array is different than 2, 3 and 5 in JavaScript?

目标是判断输入的数是否为海明数?!汉明数是因式分解后仅包含质数 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 的质因数的数字!

您可以使用 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`);
}

您可以使用Array.filter with Array.every,例如:

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

您可以使用 .some(),或更准确地说 !f.some(x => x > 5) 或在文本中:如果没有找到大于 5 的因子,则为真。

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

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

代码:

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