Уменьшите N до 1 за минимальное количество ходов, либо умножив на 2, либо разделив на 6.

Опубликовано: 20 Сентября, 2022

Для заданного целого числа N найдите минимальное количество операций, чтобы уменьшить N до 1 , используя следующие две операции:

  • Умножить N на 2
  • Разделить N на 6, если N делится на 6

Если N нельзя уменьшить до 1, выведите -1 .

Примеры:

Input: N = 54
Output: 5
Explanation: Perform the following operations

  • Divide N by 6 and get n = 9
  • Multiply N by 2 and get n = 18
  • Divide N by 6 and get n = 3
  • Multiply N by 2 and get n = 6
  • Divide N by 6 to get n = 1

Hence, minimum 5 operations needs to be performed to reduce 54 to 1

Input: N = 12
Output: -1

Подход: Задачу можно решить, используя следующие наблюдения.

  • Если число состоит из простых чисел, отличных от 2 и 3 , то ответ будет -1 , так как N нельзя уменьшить до 1 с помощью описанных выше операций.
  • В противном случае пусть count2 будет количеством двоек в факторизации n, а count3 будет количеством троек в факторизации n .
    • Если count2 > count3, то ответ равен -1 , потому что мы не можем избавиться от всех двоек.
    • В противном случае ответ будет (count3−count2) + count3 .

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O(logN)
Вспомогательное пространство: O(1)