2013-07-29 16 views
-1

有人可以帮我找到这段代码中的错误吗?我正在阅读我想出的内容,这对我来说每一步都是合乎逻辑的,但它并没有产生理想的效果。最后我打电话测试与6Javascript素数错误?

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)); 
+0

小费,而不是循环,直到'num'可以循环它,直到它的平方根'Math.sqrt(NUM)' – rps

回答

1

您从forloop内返回函数的函数。

所以它从来没有碰到其他语句

Check Fiddle

+0

@KevinBanas ..欢迎你:) –

0

我相信你所遇到的问题是,你可能退回numFactors太早:

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

在这里,你在第一次循环结束时返回numFactors,所以它实际上并没有完成完整的测试。

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)); 
0

当你通过所有的数字步进从1至NUM为factrorization你不妨接他们的因素,并得到多出来的功能的位:

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