2016-09-07 5 views
-3
function prime(number) { 
    var primeNumbers = []; 
    var numberDivide = 2; 
    for(var i=0; i<number; i++) { 
     var nice = number/numberDivide; 
     if(Math.floor(nice) == nice) { 
      number = nice; 
      primeNumbers.push(numberDivide); 
     } else { 
      numberDivide++ 
     } 
     console.log(primeNumbers) 
    } 
} 

これは私のコードです。それは最終的な素数を記録していない、なぜ私は知らない。私は、関数が何をしているか確認するために、整数で動作するコードの変換まず...なぜこの素因が働いていないのですか?

+1

これまで関数を呼び出していますか?はいの場合、どの値で動作しませんか? – Bergi

+0

さて、あなたはその数を反復し、それを一定の回数だけ分割しようとします。おそらく、あなたは最後のループに到達するかもしれませんが、それは 'else'節に入り、' numberDivide'を増やして、決して新しい値で除算しません。 – vlaz

+1

'number'変数を上書きしてもよろしいですか?あなたの話に虚偽があるので、あなたが話したことを教えてください。 – Bergi

答えて

0

を経て、それを大声で話したが、それは動作していない:

function prime(number) { 
    var primeNumbers = []; 

    for(var divisor =2; divisor <= number;){ 
     if(number % divisor == 0){ 
      primeNumbers.push(divisor); 
      number = number/divisor; 
      continue; 
     } 
     ++divisor; 
    } 
    return primeNumbers; 
} 

console.log( prime(18)); // returns [2,3,3] 

ここnumberが置き換えられます追加の素因数がすでに決定された要素以上であるかどうかを調べるために、素因数で除算した商。 numberが小さくなるのを待って、dividendはファクタであると判断された場合にはインクリメントされないので、次のループが複数の要因であるかどうかをテストできます。

ループは何回繰り返されますか?このバージョンではカウントされませんが、ループカウンタ(そうでない場合は使用されていない)がnumber以上の場合は、ポストされたバージョンが反復を停止します。

posted関数はprime(18)で失敗し、[2,3,3]ではなく[2,3]を返します。もう一度反復することが許可されている場合、正しい結果が得られます。私はループを何回行うかを事前に計算していませんが、投稿されたコードのループを終了するタイミングを見つける方法が問題の原因です。

関連する問題