0

私は JavaScript で作業しており、2 つの数値の最小公倍数を解決しています。最小公倍数は、2 つの数値の間のすべての数値で割り切れる必要があります。

現在、私のコードはまったく機能しておらず、何も返されていません。最小公倍数を計算する 1 つの関数と、その倍数が最小数と最大数の間の数で割り切れるかどうかを判断する 2 つ目の関数がありました。

function smallestCommons(arr) {

    var max = 0;
    var min = 0;
    var lcm = 0;
    var max2 = 0;
       if(arr[0]> arr[1]) {
         max = arr[0];
         min = arr[1];
       } else {
         max = arr[1];
         min = arr[0];
       }

       function range(item){
         for(var j = min+1; j < max; j++){
           if(item % j !== 0){
             return 0;
           } else {
             return item;
           }
         }
       }   
       function lcmFind(min1, max1){
         for(var i =1; i < min1; i++){
             max1 = max1 * i;

             if(range(max1) === 0){
               continue;
             } else {
               return range(max1);
             }       
           }  
         }         
       return lcmFind(min,max);    
     }
     smallestCommons([1,5]);
4

1 に答える 1

6

lcm、または最小公倍数を探しています。lcm(a, b) = a * b / gcd(a, b)gcd が最大公約数である場合、両方の数値が倍数となる最大の数値です。gcd をすばやく計算するためのユークリッド アルゴリズムと呼ばれるアルゴリズムがgcd(a, b) = gcd(b, a % b)ありa%bますa modulo b。JavaScriptでは、これです。

function gcd(a, b) {
    if (b == 0) {
        return a; // so that the recursion does not go on forever
    } else {
        return gcd(b, a % b);
    }
}

次に、次のように lcm を定義できます。

function lcm(a, b) {
    return a * b / gcd(a, b);
}

編集: 数値のリストの lcm を計算するには、lcm 関数を使用して単純に減らします。したがって、範囲内のすべての数値の lcm を計算するには、このコードが機能します。(範囲が 2 つの引数を含むと仮定)

function lcmOfRange(a, b) {
    var range = [];
    for (var i = a; i <= b; i++) {
        range.push(i);
    }
    return lcmOfList(range);
}

function lcmOfList(arr) {
    return arr.reduce(lcm);
}

これは、

function lcmOfRange(a, b) {
    var result = a;
    for (var i = a + 1, i <= b; i++) {
        result = lcm(result, i);
    }
    return result;
}
于 2016-07-16T04:33:20.173 に答える