0

目标是确定输入的数字是否是汉明数?!汉明数是所有分解后的仅包含素数 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 的素因子的所有数字!

4

4 回答 4

0

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

编码:

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;
    }
}
于 2021-02-02T17:27:18.393 回答
0

您可以使用.some(), 或更准确地说!f.some(x => x > 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))
}

于 2021-02-02T13:24:03.937 回答
0

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

const output = factors.filter(factor => [2,3,5].every(num => num !== factor))
于 2021-02-02T13:20:06.807 回答
0

您可以使用everyorder 检查是否存在所有所需的因素:

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

于 2021-02-02T13:19:23.897 回答