Вдохновленный этим вопросом закончил в математике .
Проблема
Позвольте
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. Остальное зависит от вас и вашей системы. Надеюсь, это то, что вы имели в виду под своим вопросом.




