La secuencia de Collatz (también llamada problema 3x + 1) es donde comienzas con cualquier número entero positivo, para este ejemplo usaremos 10 y le aplicaremos este conjunto de pasos:
if n is even:
Divide it by 2
if n is odd:
Multiply it by 3 and add 1
repeat until n = 1
10 es par, entonces dividimos entre 2 para obtener 5. 5 es impar, por lo que multiplicamos por 3 y sumamos 1 para obtener 16. 16 es par, así que córtalo por la mitad para obtener 8. La mitad de 8 es 4, la mitad de 4 es 2, y la mitad de 2 es 1. Como esto nos llevó a 6 pasos, decimos que 10 tiene una distancia de parada de 6.
Un número de Super Collatz es un número cuya distancia de frenado es mayor que la distancia de frenado de cada número más pequeño que él. Por ejemplo, 6 es un número de Super Collatz ya que 6 tiene una distancia de detención de 8, 5 tiene una distancia de detención de 5, 4 tiene 2, 3 tiene 7, 2 tiene 1 y 1 tiene 0. ( A006877 en el OEIS) Debe tome un número n como entrada y haga salir todos los números de Super Collatz hasta n .
Reglas
El programa completo o la función es aceptable.
No puede calcular previamente ni codificar la secuencia de Super Collatz.
Puede tomar la entrada en cualquier formato razonable.
La salida puede devolverse como una lista desde la función, o imprimirse en STDOUT o en un archivo. Lo que sea más conveniente.
Las entradas inválidas (no números, decimales, números negativos, etc.) resultan en un comportamiento indefinido.
Muestra de pitón sin golf
def collatzDist(n):
if n == 1:
return 0
if n % 2 == 0:
return 1 + collatzDist(n / 2)
return 1 + collatzDist((n * 3) + 1)
n = input()
max = -1
superCollatz = []
for i in range(1, n + 1):
dist = collatzDist(i)
if dist > max:
superCollatz.append(i)
max = dist
print superCollatz
Muestra IO:
#in #out
4 --> 1, 2, 3
50 --> 1, 2, 3, 6, 7, 9, 18, 25, 27
0 --> invalid
10000 --> 1, 2, 3, 6, 7, 9, 18, 25, 27, 54, 73, 97, 129, 171, 231, 313, 327, 649, 703, 871, 1161, 2223, 2463, 2919, 3711, 6171
También aquí están los primeros 44 números de Super Collatz:
1, 2, 3, 6, 7, 9, 18, 25, 27, 54, 73, 97, 129, 171, 231, 313, 327, 649, 703, 871, 1161, 2223, 2463, 2919, 3711, 6171, 10971, 13255, 17647, 23529, 26623, 34239, 35655, 52527, 77031, 106239, 142587, 156159, 216367, 230631, 410011, 511935, 626331, 837799