2013-07-29 5 views
-1

Может кто-нибудь, пожалуйста, помогите мне найти ошибку в этом коде? Я читаю, что я придумал, и это логично имеет смысл для меня на каждом шагу, но это не дает желаемого результата. В конце я тестирую вызов функции с 6.Javascript ошибка простого числа?

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 (число) ' – 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); 
Смежные вопросы