Визначте функцію f (n) для натурального цілого n таким чином:
- n / 2 , якщо n парне
- 3 * n + 1 , якщо n непарне
Якщо ви неодноразово застосовуєте цю функцію до будь-якого n більше 0, результат завжди схоже на 1 (хоча це ще ніхто не зміг довести). Ця властивість відома під назвою Collatz .
Визначте час зупинки цілого числа як кількість разів, яке вам доведеться пройти через функцію Collatz 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 .
Це код-гольф : найкоротша програма виграє в байтах. Удачі!