-1

有人可以帮我找出这段代码中的错误吗?我正在阅读我想出的东西,这在逻辑上对我来说每一步都是有意义的,但它并没有产生预期的结果。最后我测试用 6 调用函数。

function is_prime(num) {
    if (isNaN(num)) return false;
    var numFactors = 0;
    for (i=1; i<=num; i++) {
        if (num % i === 0) {
        numFactors += 1;
        }
        return numFactors;
    }
    if (numFactors === 2) {
        return true;
    }
    else {
        return false;
    }
}

console.log(is_prime(6));
4

4 回答 4

1

您正在从forloop.

所以它永远不会击中其他语句

检查小提琴

于 2013-07-29T17:02:56.107 回答
0

我相信您遇到的问题是您可能numFactors过早归还您的:

for (i=1; i<=num; i++) {
    if (num % i === 0) {
    numFactors += 1;
    }
    return numFactors;
}

在这里,您将在第一个循环结束时返回 numFactors,因此它实际上从未完成完整的测试。

于 2013-07-29T17:04:06.437 回答
0

计算因素不是正确的方法 -

用这个 -

function is_prime(num) {
    if (isNaN(num)) return false;
    var k = Math.sqrt(num);

    for (i=2; i<=k; i++) {
       if(num%i===0)return false;
    }
    return false;
 }

 console.log(is_prime(6));
于 2013-07-29T17:05:24.900 回答
0

当您逐步遍历从 1 到 num 的所有数字以进行因式分解时,您不妨将它们作为因数,并从您的函数中获得更多信息:

function fact(num) {
    if (isNaN(num)) return false;
    var Factors=[];
    for (i=1; i<=num; i++) {
     if (num % i == 0)  Factors.push(i)
    }
    return Factors
}

console.log('factors: '+fact(27));
console.log('is prime: '+fact(27).length===2);
于 2013-07-29T17:14:59.897 回答