Defina a função f (n) para um número inteiro positivo n da seguinte maneira:
- n / 2 , se n for par
- 3 * n + 1 , se n for ímpar
Se você aplicar repetidamente esta função a qualquer n maior que 0, o resultado sempre parecerá convergir para 1 (embora ninguém tenha conseguido provar isso ainda). Essa propriedade é conhecida como Conjectura Collatz .
Defina o tempo de parada de um número inteiro como o número de vezes que você deve passar pela função Collatz f antes de atingir 1. Aqui estão os tempos de parada dos 15 primeiros números inteiros:
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
Vamos ligar para qualquer conjunto de números com o mesmo tempo de parada primos Collatz . Por exemplo, 5 e 32 são primos de Collatz, com um tempo de parada de 5.
Sua tarefa: escreva um programa ou função que use um número inteiro não negativo e gere o conjunto de primos Collatz cujo tempo de parada é igual a esse número inteiro.
Entrada
Um número inteiro não negativo S, fornecido via STDIN, ARGV ou argumento de função.
Saída
Uma lista de todos os números cujo tempo de parada é S, classificados em ordem crescente . A lista pode ser impressa pelo seu programa ou retornada ou impressa pela sua função. O formato de saída é flexível: espaço separado, nova linha ou qualquer formato de lista padrão do seu idioma é adequado, desde que os números sejam facilmente distinguíveis um do outro.
Exigências
Seu envio deve fornecer resultados corretos para qualquer S ≤ 30. Ele deve terminar em segundos ou minutos, não horas ou dias.
Exemplos
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
Aqui está uma síntese da saída para S = 30 .
Este é o código-golfe : o programa mais curto em bytes vence. Boa sorte!