Определите функцию f (n) для натурального числа n следующим образом:
- n / 2 , если n четное
- 3 * n + 1 , если n нечетно
Если вы неоднократно применяете эту функцию к любому n, большему 0, результат всегда кажется сходящимся к 1 (хотя пока никто не смог доказать это). Это свойство известно как гипотеза Коллатца .
Определите время остановки целого числа как количество раз, которое вы должны пройти через функцию Коллатца f, прежде чем оно достигнет 1. Вот время остановки первых 15 целых чисел:
1 0
2 1
3 7
4 2
5 5
6 8
7 16
8 3
9 19
10 6
11 14
12 9
13 9
14 17
15 17
Давайте назовем любой набор чисел с одинаковым временем остановки двоюродных братьев Коллатц . Например, 5 и 32 - двоюродные братья Коллатц, время остановки 5.
Ваша задача: написать программу или функцию, которая принимает неотрицательное целое число и генерирует набор двоюродных братьев Коллатц, время остановки которых равно этому целому числу.
вход
Неотрицательное целое число S, заданное через STDIN, ARGV или аргумент функции.
Выход
Список всех чисел, время остановки которых S, отсортировано в порядке возрастания . Список может быть выведен вашей программой или возвращен или выведен вашей функцией. Формат вывода гибкий: разделенный пробелами, разделенный новой строкой или любой стандартный формат списка вашего языка подходит, если числа легко отличимы друг от друга.
Требования
Ваше представление должно давать правильные результаты для любого S ≤ 30. Оно должно заканчиваться в секундах или минутах, а не часах или днях.
Примеры
0 -> 1
1 -> 2
5 -> 5, 32
9 -> 12, 13, 80, 84, 85, 512
15 -> 22, 23, 136, 138, 140, 141, 150, 151, 768, 832, 848, 852, 853, 904, 906, 908, 909, 5120, 5376, 5440, 5456, 5460, 5461, 32768
Вот суть вывода для S = 30 .
Это код-гольф : выигрывает самая короткая программа в байтах. Удачи!