Вдохновленный этим вопросом закончил в математике .
Проблема
Позвольте
n
быть натуральным числом≥ 2
. Возьмите самый большой делительn
- который отличается отn
самого себя - и вычтите егоn
. Повторяйте, пока не получите1
.
Вопрос
Сколько шагов нужно, чтобы достичь 1
определенного числа n ≥ 2
.
Подробный пример
Пусть
n = 30
.
Величайший делитель:
1. 30 is 15 --> 30 - 15 = 15
2. 15 is 5 --> 15 - 5 = 10
3. 10 is 5 --> 10 - 5 = 5
4. 5 is 1 --> 5 - 1 = 4
5. 4 is 2 --> 4 - 2 = 2
6. 2 is 1 --> 2 - 1 = 1
Требуется 6 шагов, чтобы добраться 1
.
вход
- Ввод является целым числом
n
, гдеn ≥ 2
. - Ваша программа должна поддерживать ввод до максимального целочисленного значения языка.
Выход
- Просто выведите количество шагов, например
6
. - Лидирующие / завершающие пробелы или переводы строк в порядке.
Примеры
f(5) --> 3
f(30) --> 6
f(31) --> 7
f(32) --> 5
f(100) --> 8
f(200) --> 9
f(2016^155) --> 2015
Требования
- Вы можете получить входные данные из
STDIN
аргументов командной строки как параметры функции или из ближайшего аналога. - Вы можете написать программу или функцию. Если это анонимная функция, пожалуйста, включите пример того, как ее вызвать.
- Это код-гольф, поэтому выигрывает самый короткий ответ в байтах.
- Стандартные лазейки запрещены.
Эту серию можно также найти на OEIS: A064097
Квазилогарифм, индуктивно определяемый как
a(1) = 0
иa(p) = 1 + a(p-1)
еслиp
простое иa(n*m) = a(n) + a(m)
еслиm,n > 1
.
2^32 - 1
. Остальное зависит от вас и вашей системы. Надеюсь, это то, что вы имели в виду под своим вопросом.