Celui-ci c’est un exercice pour se réchauffer un peux les doigts en commençant une séance de python débutant et apprendre cette curiosité. Pour expliquer la suite de Syracuse, ou de Collatz, je me fais aider directement par Wikipedia:
En mathématiques on appelle suite de Syracuse une suite d’entiers naturels définie de la manière suivante :
On part d’un nombre entier plus grand que zéro ; s’il est pair, on le divise par 2 ; s’il est impair, on le multiplie par 3 et on ajoute 1. En répétant l’opération, on obtient une suite d’entiers positifs dont chacun ne dépend que de son prédécesseur.
Par exemple, à partir de 14, on construit la suite des nombres : 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2… C’est ce qu’on appelle la suite de Syracuse du nombre 14.
Après que le nombre 1 a été atteint, la suite des valeurs (1,4,2,1,4,2…) se répète indéfiniment en un cycle de longueur 3, appelé cycle trivial.
Si l’on était parti d’un autre entier, en lui appliquant les mêmes règles, on aurait obtenu une suite de nombres différente. A priori, il serait possible que la suite de Syracuse de certaines valeurs de départ n’atteigne jamais la valeur 1, soit qu’elle aboutisse à un cycle différent du cycle trivial, soit qu’elle diverge vers l’infini. Or, on n’a jamais trouvé d’exemple de suite obtenue suivant les règles données qui n’aboutisse pas à 1 et, par suite, au cycle trivial.
Ici, on implémentera une petite fonction en python pour calculer le numéro de Collatz a partir d’un nombre entier et fera une boucle dans laquelle on appellera Collatz j’usq a obtenir la réponse “1” qui pour nous signifie la fin des calcules.
def collatz(x): if x%2 == 0 : return x // 2 else : return x * 3 + 1 # Seulement pour tester" print (collatz(10)) # Requete d'input n = int(input("Un grand intier s'il vous plait: ")) ite = 1 res = 0 while res != 1 : res = collatz(n) print ("Iteration: ", ite, "Collatz: ", res) n = res ite += 1