2017-12-21 3 views
-3

から誰でも説明できるコード/ブレークダウンコードをループしますか?私はfreecodecampに「最小の共通倍数」の挑戦を見つけるつもりです。また、私が理解している限り、コメントを追加しました。最小公倍数を見つけるためにwhileループを理解するループ

function smallestCommons(arr) { 
    var min = Math.min(arr[0], arr[1]) 
    var max = Math.max(arr[0], arr[1]) 
    var range = [] 

    for(var i = min; i<=max; i++){ 
    range.push(i); //array of numbers between min and max 
    } 

    var a = Math.abs(range[0]) //absolute position of negative nums from 0 

    for(var j=1; j<range.length; j++){ 
    var b = Math.abs(range[j]); //iterating range array 
    var c = a; 

    while(a && b){ //filtering 0. will continue looping as long as a and b is NOT 0 
     if(a>b) { 
     a = a%b; //then we will change the value of a to the remainder of a/b 
     } else { 
     b= b%a; //changing the value of b 
     } 
    } 

    a = Math.abs(c*range[j] /(a + b)); 
    } 

    return a; 
} 

smallestCommons([1,5]); 
+1

あなたはそれをかなりよく理解しているように思えます。どの部分が正確にあなたは苦労していますか? 'a = a%b'?これはあなたに正しい方向へのプッシュを与えるために[**モジュロ**](https://en.wikipedia.org/wiki/Modulo_operation)として知られています:) –

+1

それはあなたが見上げて自分でやるべきことのようですが、あなたが学びたいならば。モジュロの背後にある数学を理解することは役に立ちます。ところで、 'var a'に対するあなたのコメントは理にかなっていません。 – NetMage

+0

ありがとう@ObsidianAge!私は 'a = a%b;'を理解しています。 aの値をa/bの残りの部分に変更しますが、私はちょうどその背後にある論理に従うことができません。 – bom

答えて

1

基本的アルゴリズムは、すべての数字をループ、およびのみの要因により現在の数を除算した後に残され、次の数(例えば、中に存在する任意の新たな要因によって現在実行中のSCMを乗算することにより実行最小公倍数を計算しますGCD(実行中のSCM、現在の番号))。

function smallestCommons(arr) { 
// find the smallest common multiple of all the integers from arr[0] to arr[1] 

    var min = Math.min(arr[0], arr[1]); // get the starting number 
    var max = Math.max(arr[0], arr[1]); // get the ending number 
    var range = []; // array of all the numbers 

    for(var i = min; i<=max; i++){ 
    range.push(i); //array of numbers between min and max 
    } 

    var a = Math.abs(range[0]); // start with first number 

    for(var j=1; j<range.length; j++) { // compute over remaining numbers in range 
    var b = Math.abs(range[j]); // get the next number to process 
    var c = a; // remember starting point for end 

    while(a && b){ // find the GCD of a & b 
     if(a>b) { 
     a = a%b; 
     } else { 
     b = b%a; 
     } 
    } 
    // the GCD will be in a or b, whichever is not zero 

// compute the smallest common multiple of the numbers from range[0] to range[j] 
// by multiplying in the remaining factors after removing the GCD 
// which is range[j]/(a+b) since either a or b is the GCD 
    a = Math.abs(c*range[j] /(a + b)); 
    } 

    return a; 
} 
関連する問題