2016-07-16 7 views
0

私は、この解決策を理解して、素因数を得るために助けが必要です。これは私がforループの理解が、私は、whileループと分裂に何が起こっているのか分からないコード demowhileループのモジュラスはどのように実行されますか?

function getMaxPrimeFactor (n) { 
    var temp = n; 
    for(var i = 2; i < temp; i++) { 
     while (temp % i === 0) { 
      temp /= i; 
     } 
    } 
    console.log(temp); 
} 

getMaxPrimeFactor(13195); 

で、どのようにそれは29の出力を取得したのですか? temp % iの値が0であれば

+0

モジュラスがあなたに割り算の余りを与えます残りが非ゼロになるまでループします。 – jfriend00

+0

@ jfriend00ありがとう、ok、私はconsole.log(i)です.29までは2ですが、tempは13195です。このコードはどのように実行されますか? –

答えて

2

はここで何が起こっているのです:

forループのポイントは2間のすべての単一の除数と元の数に等しいから始まりtempの現在の値を試してみることです。

whileループのポイントは、これらの除数のそれぞれをとり、可能な限りそれらを試してみることです。残りが均等に分割されたことを意味する0が出てくる限り、分割して毎回除算の結果にtempを減らしてください。

したがって、while (temp % i === 0)は、tempが剰余なしで均等に分割する限り、whileループを継続して実行することを意味します。 %モジュラス演算子は、除算後の剰余を計算します。

ここであなたが実行したとき、それは何が起こっているかについて、もう少しあなたが表示されていることをより多くのインストルメントバージョンがあります:それはしばらく走るよう

function getMaxPrimeFactor (n) { 
 
    var temp = n; 
 
    for(var i = 2; i < temp; i++) { 
 
     while (temp % i === 0) { 
 
      temp /= i; 
 
      console.log("factor=",i,", ",temp*i,"/",i, "=",temp); 
 
     } 
 
    } 
 
    console.log("remaining factor=",temp); 
 
} 
 

 
getMaxPrimeFactor(13195);

+0

インストゥルメントスニペットを追加して、何をしているかを表示します。 – jfriend00

+0

ありがとう!あなたは尋ねられた以上に答えました。 +担当者 –

1

ここwhileがチェックされる(即ちtempiと割り切れる場合)。この条件がtrueある場合、それはtemp

temp/iを格納しますwhile条件が真のときに

i temp (temp % i) new_temp_value(temp/i) 
5 13195 0   2639 
7 2639 0   377 
13 377 0   29 
29 29  -   - //for loop stops here since `i < temp` condition doesn't satisfy. 

最終一時値は、我々は上からのみi値を考慮すれば、我々が得るので29

です5, 7, 13, 29は、13195の因子である。

すなわち5 * 7 * 13 * 29 = 13195

したがって要因の最大値が29あります。

関連する問題