Defina la función f (n) para un entero positivo n de la siguiente manera:
- n / 2 , si n es par
- 3 * n + 1 , si n es impar
Si aplica repetidamente esta función a cualquier n mayor que 0, el resultado siempre parece converger a 1 (aunque todavía nadie ha podido probarlo). Esta propiedad se conoce como la conjetura de Collatz .
Defina el tiempo de detención de un número entero como el número de veces que debe pasarlo a través de la función Collatz f antes de que llegue a 1. Aquí están los tiempos de detención de los primeros 15 enteros:
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
Llamemos a cualquier conjunto de números con el mismo tiempo de detención que los primos de Collatz . Por ejemplo, 5 y 32 son primos de Collatz, con un tiempo de parada de 5.
Su tarea: escribir un programa o función que tome un número entero no negativo y genere el conjunto de primos de Collatz cuyo tiempo de detención es igual a ese número entero.
Entrada
Un entero S no negativo, dado a través de STDIN, ARGV o argumento de función.
Salida
Una lista de todos los números cuyo tiempo de detención es S, ordenados en orden ascendente . La lista puede ser generada por su programa, o devuelta o generada por su función. El formato de salida es flexible: está separado por espacios, por líneas nuevas o cualquier formato de lista estándar de su idioma, siempre que los números se puedan distinguir fácilmente entre sí.
Requisitos
Su envío debe dar resultados correctos para cualquier S ≤ 30. Debe finalizar en segundos o minutos, no en horas o días.
Ejemplos
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
Aquí hay un resumen de la salida para S = 30 .
Esto es code-golf : el programa más corto en bytes gana. ¡Buena suerte!