Простая факторизация в Javascript

#javascript #prime-factoring

#javascript #разложение на простые множители

Вопрос:

Мне нужно написать функцию простой факторизации, которая возвращает объект, ключи которого являются простым множителем, а значения являются показателями соответствующих простых множителей. Например.

console.log(первичная факторизация(4)) // { 2: 2 } console.log(первичная факторизация(6)) // { 2: 1, 3: 1 }

Мой код пока приведен ниже, но я застрял. Любая помощь очень ценится.

 const primeFactorisation = (num) => {
    let result = {};
    for (let i = 2; i < num; i  ) {
      if (num % i === 0) {
        result[i] = i;
        num /= i;
      }
    }
    return result
  }
  

Комментарии:

1. Я дам вам подсказку: result[i] = i; должно быть result[i] = 1; , но сначала вам нужно проверить, что оно равно как минимум 0. Кроме того, внутри оператора if поместите i-- . Это означает, что значение i будет отрицаться, поэтому i будет таким же при повторном цикле. Редактировать: вложенный while цикл также будет работать

Ответ №1:

Когда число найдено, увеличьте его на объекте результата вместо присвоения i объекту результата.

Вам также нужен вложенный цикл для продолжения тестирования числа до тех пор, пока оно больше не будет делиться равномерно, и вам также нужно i <= num , not i < num , чтобы был пойман последний фактор:

 const primeFactorisation = (num) => {
  let result = {};
  for (let i = 2; i <= num; i  ) {
    while (num % i === 0) {
      result[i] = (result[i] || 0)   1;
      num /= i;
    }
  }
  return result
}
console.log(
  primeFactorisation(6),
  primeFactorisation(4),
);