Изучение нескольких методов для поиска наименьшего общего кратного в JavaScript

Нахождение наименьшего общего кратного (НОК) двух или более чисел — распространенная задача в математике и информатике. В этой статье блога мы рассмотрим несколько методов расчета LCM с использованием JavaScript. Мы предоставим примеры кода для каждого подхода и обсудим их плюсы и минусы. Давайте погрузимся!

Метод 1: подход грубой силы
Подход грубой силы предполагает перебор кратных большего числа, пока не будет найдено число, которое делится на все заданные числа. Вот код:

function findLCMBruteForce(numbers) {
  const maxNumber = Math.max(...numbers);
  let lcm = maxNumber;
  while (true) {
    if (numbers.every(number => lcm % number === 0)) {
      return lcm;
    }
    lcm += maxNumber;
  }
}
const numbers = [4, 6, 8];
const lcm = findLCMBruteForce(numbers);
console.log(`LCM: ${lcm}`);

Метод 2: подход наибольшего общего делителя (НОД)
НОК можно рассчитать, используя соотношение между НОД и НОД двух чисел. Мы можем использовать алгоритм Евклида, чтобы найти НОД, а затем вычислить НОК по этой формуле: НОК(a, b) = (a * b) / НОД(a, b). Вот код:

function findGCD(a, b) {
  if (b === 0) {
    return a;
  }
  return findGCD(b, a % b);
}
function findLCMGCD(numbers) {
  let lcm = numbers[0];
  for (let i = 1; i < numbers.length; i++) {
    const currentNumber = numbers[i];
    const gcd = findGCD(lcm, currentNumber);
    lcm = (lcm * currentNumber) / gcd;
  }
  return lcm;
}
const numbers = [4, 6, 8];
const lcm = findLCMGCD(numbers);
console.log(`LCM: ${lcm}`);

Метод 3: подход к факторизации простых чисел
Подход к факторизации простых чисел включает в себя нахождение простых множителей каждого числа и умножение наибольшей степени каждого множителя для расчета НОК. Вот код:

function getPrimeFactors(number) {
  const factors = [];
  let divisor = 2;
  while (number >= 2) {
    if (number % divisor === 0) {
      factors.push(divisor);
      number /= divisor;
    } else {
      divisor++;
    }
  }
  return factors;
}
function findLCMPrimeFactorization(numbers) {
  const allFactors = [];
  const factorsMap = {};
  numbers.forEach(number => {
    const factors = getPrimeFactors(number);
    factors.forEach(factor => {
      if (!factorsMap[factor] || factorsMap[factor] < factors.filter(f => f === factor).length) {
        factorsMap[factor] = factors.filter(f => f === factor).length;
      }
    });
    allFactors.push(...factors);
  });
  const lcm = allFactors.reduce((acc, factor) => acc * factor, 1);
  return lcm;
}
const numbers = [4, 6, 8];
const lcm = findLCMPrimeFactorization(numbers);
console.log(`LCM: ${lcm}`);

В этой статье мы рассмотрели три различных метода поиска наименьшего общего кратного в JavaScript. Мы обсудили подход грубой силы, подход НОД и подход простой факторизации. Каждый метод имеет свои преимущества и недостатки, и выбор метода зависит от таких факторов, как размер входных чисел и требования к эффективности приложения. Понимая эти методы, вы будете лучше подготовлены к эффективному решению задач LCM в JavaScript.