Наименее распространенное множественное число: что не так с моим кодом?

function lcm(arr) {
  arr = arr.sort(function(a, b) {
    return a - b;
  });
  var j = 1;
  var num = arr[0];
  for (i = 1; i < arr.length; i++) {
    while (num % arr[i] !== 0) {
      j = j + 1;
      num = j * arr[0];
    }
    arr[0] = num;
  }
  return num;
}

console.log(lcm([3, 5, 6, 10]));

Я пытаюсь найти наименьшее общее кратное для диапазона чисел в массиве. Код отлично работает для массива с двумя элементами, однако вывод для массивов с более чем двумя элементами, кажется, превышает ожидаемое значение. Может ли кто-нибудь помочь мне найти ошибку в моем коде?

Спасибо

1 ответ

Задавать j вернуться к 1 каждый раз через цикл через элементы массива. В противном случае, когда вы обрабатываете следующий номер, вы начинаете с высокого множителя.

// function that find the least common multiple
function lcm(arr) {
  arr = arr.sort(function(a, b) {
    return a - b;
  });
  var num = arr[0];
  for (i = 1; i < arr.length; i++) {
    var j = 1;
    while (num % arr[i] !== 0) {
      j = j + 1;
      num = j * arr[0];
    }
    arr[0] = num;
  }
  return num;
}

console.log(lcm([3, 5, 6, 10]));

Другие вопросы по тегам