我想获得前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()
答案 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))) {/* ... */}