La sequenza Collatz (chiamata anche problema 3x + 1) è dove inizi con qualsiasi numero intero positivo, per questo esempio useremo 10 e applicheremo questo set di passaggi ad esso:
if n is even:
Divide it by 2
if n is odd:
Multiply it by 3 and add 1
repeat until n = 1
10 è pari, quindi dividiamo per 2 per ottenere 5. 5 è dispari, quindi moltiplichiamo per 3 e aggiungiamo 1 per ottenere 16. 16 è pari, quindi tagliatelo a metà per ottenere 8. La metà di 8 è 4, la metà di 4 è 2 e la metà di 2 è 1. Dato che ci sono voluti 6 passaggi, diciamo che 10 ha una distanza di arresto di 6.
Un numero Super Collatz è un numero la cui distanza di arresto è maggiore della distanza di arresto di ogni numero più piccolo di esso. Ad esempio, 6 è un numero Super Collatz poiché 6 ha una distanza di arresto di 8, 5 ha una distanza di arresto di 5, 4 ha 2, 3 ha 7, 2 ha 1 e 1 ha 0. ( A006877 nell'OEIS) È necessario prendere un numero n come input ed emettere tutti i numeri di Super Collatz fino a n .
Regole
Il programma completo o la funzione sono accettabili.
Non è possibile precompilare o codificare la sequenza Super Collatz.
Puoi ricevere input in qualsiasi formato ragionevole.
L'output può essere restituito come elenco dalla funzione o stampato su STDOUT o su un file. Qualunque sia il più conveniente.
Gli input non validi (non numeri, decimali, numeri negativi, ecc.) Comportano un comportamento indefinito.
Pitone ungolf di esempio
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
IO di esempio:
#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
Anche qui ci sono i primi 44 numeri di 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