La séquence Collatz (également appelée problème 3x + 1) est l'endroit où vous commencez avec n'importe quel entier positif, pour cet exemple, nous utiliserons 10 et lui appliquerons cet ensemble d'étapes:
if n is even:
Divide it by 2
if n is odd:
Multiply it by 3 and add 1
repeat until n = 1
10 est pair, donc nous divisons par 2 pour obtenir 5. 5 est impair, donc nous multiplions par 3 et ajoutons 1 pour obtenir 16. 16 est pair, alors coupez-le en deux pour obtenir 8. La moitié de 8 est 4, la moitié de 4 est 2, et la moitié de 2 est 1. Comme cela nous a pris 6 étapes, nous disons que 10 a une distance d'arrêt de 6.
Un nombre Super Collatz est un nombre dont la distance d'arrêt est supérieure à la distance d'arrêt de chaque nombre inférieur à lui. Par exemple, 6 est un nombre Super Collatz puisque 6 a une distance d'arrêt de 8, 5 a une distance d'arrêt de 5, 4 a 2, 3 a 7, 2 a 1 et 1 a 0. ( A006877 dans l'OEIS) Vous devez prendre un nombre n en entrée et sortir tous les nombres Super Collatz jusqu'à n .
Règles
Un programme ou une fonction complète est acceptable.
Vous ne pouvez pas précalculer ou coder en dur la séquence Super Collatz.
Vous pouvez prendre des entrées dans n'importe quel format raisonnable.
La sortie peut être renvoyée sous forme de liste à partir de la fonction, ou imprimée sur STDOUT ou un fichier. Celui qui est le plus pratique.
Les entrées non valides (non-nombres, décimales, nombres négatifs, etc.) entraînent un comportement non défini.
Exemple de python non 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
Exemple d'E / S:
#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
Voici également les 44 premiers numéros 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