2016-09-03 10 views
2

私はこのアルゴリズムの割り当てを持っています。私の解決策はwiki hows'の解決策に基づいています.2つの数値のLCMを正しく計算するこのコードがあります。私はすでにwiki howsで他の方法を試しましたが、私のロジックは非常に間違っています。Euclidアルゴリズムを使用して配列または複数の整数のLCMを計算する方法は?

数字の範囲にこのコードを適用するにはどうすればよいですか? [245,244,243 ... 45]のようにこのコードに基づいています。複数の数値のLCMを取得する必要があります

function smallestCommons(arr) { 
var max, 
    min, 
    product, 
    rem; 

max = Math.max.apply(Math, arr); 
min = Math.min.apply(Math, arr); 

    product = max*min; 

function gcd(max,min) { 
debugger; 
rem = max%min; 
max=min; // update variables until remainder is equal to 0 
min=rem; 
if(rem === 0) { 
return max; // return the max variable for GCD 
    } else { 
return gcd(max,min); 
} 
} 

return product/gcd(max,min); 
} 

smallestCommons([210,45]); 
+0

ヒントは、次の性質が成り立つ 'LCM(A、B、C)= LCM(LCM(B、C))'。 – redneb

+0

a、b、cとは何ですか?この部分(a、lcm(b、c))は、aをbとする再帰ですか?それを手に入れてはいけない、私は数学では良くない、これは数式ですか? – learningjavascriptks

+0

はい、それは数式です。すべての整数 'a'、' b'、 'c'に当てはまります。 – redneb

答えて

1

複数の数値のLCMを取得するには、再帰を行います。 3つの数字2,3,4がある場合。 3と4の1cmを取ってから、2cmの1cmを取る。等:

lcm(2,lcm(3,4)) 

コード:

//This is your function 
function gcd(max,min){ 
    rem = max%min; 
    max=min; // update variables until remainder is equal to 0 
    min=rem; 
    if(rem === 0) { 
     return max; // return the max variable for GCD 
    } 
    else { 
     return gcd(max,min); 
    } 
} 

//This function computes the LCM 
function lcm(a,b){ 
    return (a*b)/gcd(a,b) 
} 

//This function is the Iterator, it computes the LCM for the numbers 
//in the INPUT array recursively by calling the previous function 
function lcmIter(arr,len){ 
    //LENGTH of array -> 2 is the base case here, if there are only 
    //two numbers just compute its LCM and return it. 
    if(len === 2){ 
     return lcm(arr[0],arr[1]) 
    } 
    //If there are more than two numbers, compute the LCM of last 
    //number with the rest of array(now the array is one less) 
    else{ 
     return lcm(arr[len-1],lcmIter(arr,len-1)) 
    } 
} 
//This is your input array 
var array = [2,3,4,5] 
//call your iterator with the array and its length 
console.log(lcmIter(array,array.length)) 
関連する問題