【问题标题】:How to determine if given number is Hamming number by combining two functions in JavaScript?如何通过结合JavaScript中的两个函数来确定给定的数字是否是汉明数?
【发布时间】:2021-05-05 14:51:15
【问题描述】:

目标是确定一个数是否是汉明数?!众所周知,汉明数是一个仅包含 2、3 和 5 作为因数的数。这意味着一个数字不能包含任何大于 5 的素数!所以我创建了一个函数 isPrimeNumber 来确定一个数字是否是素数,然后我创建了一个函数来确定一个数字是否包含因子 2、3 和 5?!

function isPrimeNumber(n){
    if(n===1){
        return true;
    }else if((n%1!==0)||(n<=0)){
        return false;
    }else{
    for (var i=2; i<n; i++){
        if (n%i===0)
            return false;
        }
        return true;
    }
}

function isHamming(n){
    if(((n%2===0)||(n%3===0)||(n%5===0))){
        return true;
    }else if((isPrimeNumber(n)===true)&&(n>=7)){
        return false;
    }else{
        return false;
    }
}

想要结合这两个函数来确定输入的数字是否是汉明数?!

【问题讨论】:

  • 你真的需要质数检查吗?听起来您可以检查第一个条件,然后在任何其他数字上返回 false:return n%2 === 0 || n%3 === 3 || n%5 === 0
  • -4 是根据您的实现的汉明数。但是,我认为不是。
  • 我必须添加 n 必须为正 (n>0) 的条件。谢谢!
  • 我必须添加检查一个数字是否是大于或等于 7 的素数,因为所有其他因素都包含在 n 必须被 2、3 或 5 整除的条件内,并且不能被任何大于 5 的素数整除。
  • @IvanVrzogic Hamming numbers 采用2^i * 3^j * 5^k 的形式,其中i,j,k &gt;= 0。所以@guidot 答案中的最后一个要点将是正确的解决方案。

标签: javascript function for-loop hamming-numbers


【解决方案1】:
  • 在给定的实现中,素数检查没有什么用处,并且具有可怕的时间复杂度 O(n)。
  • 仅证明该数字是 2、3 或 5 的倍数是不够的。还必须证明不包含其他因素。 (示例:14 不是素数,包含因数 2 但也包含 7 -> 没有汉明数)
  • 我认为除了以下内容别无选择:您必须依次除以 2、3 和 5(只要包含每个因子),然后查看是否达到 1。

【讨论】:

  • 重点是有资格被称为汉明数的数必须能被2、3或5整除,并且不能被任何大于或等于的素数整除到7.所以看不到如何从代码中排除素数检查。
猜你喜欢
  • 2018-09-28
  • 2022-01-23
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 2019-07-21
  • 1970-01-01
  • 2020-03-03
相关资源
最近更新 更多