汉明数字代码不起作用

时间:2018-05-16 20:58:13

标签: javascript

我想获得前10个汉明数字(素数因素为2,3和5的数字)。第一个getFactors(num)函数返回我想要的(素数因子的set),但是第二个hammingNum()函数没有按预期运行。有什么想法吗?

    let factors = []
        isPrime = true


    function getFactors(num){   

        while (num % 2 === 0){
            factors.push(2);
            num /= 2;
        } 

        for (i = 3; i < num; i++){
            if (num % i === 0){
                isPrime = false;
                break;
            } else {
                isPrime = true
            }
        } 

        if (isPrime){
            factors.push (num)
        }

        if (!isPrime) {
            factors.push (i)
            getFactors (num/i)
        }

        return new Set (factors) //return a set of prime numbers     
    } 


    function hammingNums(){
        let list = []

        while (list.length < 11){
            for (i = 1; i<1000; i++){

                if ((getFactors (i)).has (2 && 3 && 5)){
                    list.push (i)
                } 
            } 
        } return list

    hammingNums()

2 个答案:

答案 0 :(得分:1)

在第二个示例中,您将2 && 3 && 5 === 5传递给has方法。

这个怎么样?

var s = getFactors(i);
if(s.has(2) && s.has(3) && s.has(5)) {
    ...

答案 1 :(得分:0)

此行是问题的原因:

if ((getFactors (i)).has (2 && 3 && 5)) {/* ... */}

您必须明确列出每个条件:

if (getFactors(i).has(2) && getFactors(i).has(3) && getFactors(i).has(5)) {/* ... */}

由于看起来getFactors是一个可能很昂贵的电话,你应该只执行一次,然后存储结果并使用它:

const factors = getFactors(i);
if (factors.has(2) && factors.has(3) && factors.has(5)) {/* ... */}

最后,您可以使用数组.every方法缩短该条件(如果需要):

const factors = getFactors(i);
if ([2, 3, 5].every(n => factors.has(n))) {/* ... */}