Syracuze

Certaines conjectures mathématiques se formulent en une ligne, mais résistent depuis des décennies aux meilleurs mathématiciens du monde. La conjecture de Syracuse en est l’exemple parfait : accessible dès le lycée, elle n’a à ce jour jamais été prouvée ni infirmée. En prépa ECG, elle constitue un terrain d’application idéal pour la récursivité, les boucles conditionnelles et la visualisation en Python. Dans cet article, nous allons définir la suite de Syracuse et présenter la conjecture, implémenter l’algorithme et visualiser le temps de vol, puis explorer le comportement de la suite selon le point de départ.

Définition et conjecture

La suite de Syracuse

Soit \(n\) un entier naturel strictement positif. On définit la suite de Syracuse de point de départ \(n\) par la relation de récurrence suivante :

\[u_{k+1} = \begin{cases} \frac{u_k}{2} & \text{si } u_k \text{ est pair} \\ \frac{3u_k + 1}{2} & \text{si } u_k \text{ est impair} \end{cases}\]

avec \(u_0 = n\).

Par exemple, pour \(n = 6\) :

\[6 \to 3 \to 5 \to 8 \to 4 \to 2 \to 1\]

La conjecture de Syracuse

La conjecture de Syracuse affirme que pour tout entier \(n \geq 1\), la suite finit par atteindre \(1\). Une fois que la suite atteint \(1\), elle entre dans le cycle \(1 \to 2 \to 1 \to 2 \to \cdots\) et n’en sort plus.

La conjecture a été vérifiée informatiquement pour tous les entiers jusqu’à \(2^{68} \approx 2{,}95 \times 10^{20}\), mais aucune preuve générale n’existe à ce jour. Le mathématicien Paul Erdős disait à son sujet : « Les mathématiques ne sont pas encore prêtes pour ce type de problème. »

On définit deux quantités associées à chaque point de départ \(n\) :

  • Le temps de vol \(T(n)\) : le nombre d’étapes nécessaires pour atteindre \(1\) pour la première fois.
  • L’altitude maximale \(M(n)\) : la valeur maximale atteinte par la suite avant de redescendre à \(1\).

 

Ces deux quantités sont très irrégulières en fonction de \(n\) : des entiers voisins peuvent avoir des comportements radicalement différents, ce qui rend la suite particulièrement difficile à analyser et visuellement intéressante à explorer en Python.

Implémentation en Python

Calcul de la suite et du temps de vol

On commence par implémenter une fonction qui calcule la suite de Syracuse depuis un point de départ \(n\) et renvoie la liste de tous les termes jusqu’à \(1\).

La boucle while tourne tant que \(n \neq 1\). À chaque étape, on teste la parité de \(n\) avec l’opérateur modulo % : si n % 2 == 0, la valeur est paire, sinon elle est impaire. On utilise la division entière // plutôt que la division flottante / pour rester dans les entiers, ce qui est plus propre et évite les erreurs d’arrondi pour de grandes valeurs de \(n\).

Attention, la fonction temps_de_vol renvoie la longueur de la liste moins 1 : on soustrait 1, car la liste inclut le point de départ \(n\) qui ne compte pas comme une étape.

En exécutant ce code pour \(n=27\), c’est-à-dire que \(u_0 = 27\), on a un temps de vol de 70 et une altitude max de 9232 d’après ce script.

Visualisation de la suite

On peut aussi vouloir visualiser le « vol » de la suite pour un point de départ donné, c’est-à-dire l’évolution de \(u_k\) en fonction de \(k\). Voici un exemple de script qui permet de faire cela :

Voici le graph pour \(n=27\) :

 

Suite de Syracuze

Info : on choisit \(n = 27\), car c’est un exemple célèbre. Malgré un point de départ modeste, la suite monte jusqu’à \(9232\) avant de redescendre vers \(1\), avec un temps de vol de \(70\) étapes. C’est un bon exemple de la nature imprévisible de la suite.

Exploration statistique

Temps de vol en fonction du point de départ

On calcule le temps de vol pour tous les entiers de \(1\) à \(N\) et on visualise son évolution.

Le marqueur ‘,’ dans plt.plot trace un pixel par point, ce qui est beaucoup plus lisible qu’une ligne continue pour \(1000\) points. On constate visuellement que le temps de vol est très irrégulier : certains entiers convergent en quelques étapes, d’autres prennent bien plus de temps sans que l’on puisse le prévoir depuis la valeur de \(n\) seule.

On obtient alors le joli graph suivant :

Temps de vol

Distribution des temps de vol

Pour aller plus loin, on visualise la distribution des temps de vol sous forme d’histogramme par un graph où l’axe des ordonnées représente le nombre de points de départ n (parmi 1 à 1000) qui ont ce temps de vol et l’axe des abscisses donne le temps de vol.

Dans ce graph, nous avons fait en sorte d’afficher l’output avec des paramètres qui facilitent sa lecture (couleur, etc.), mais de tels paramètres sont évidemment inutiles au concours et autant gagner du temps en ne les inscrivant pas !

On obtient alors le graph suivant :

Distribution des temps de vol

L’histogramme révèle que la distribution des temps de vol est asymétrique à droite : la majorité des entiers convergent en moins de \(50\) étapes, mais une minorité prend beaucoup plus de temps, tirant la moyenne vers le haut.

Conclusion

En définitive, la suite de Syracuse est un objet mathématique d’une richesse remarquable : une règle élémentaire suffit à produire des comportements complexes et irréguliers que les mathématiques peinent encore à expliquer.

En Python, elle illustre naturellement la récursivité, les boucles conditionnelles et la visualisation statistique. Bref, cette suite permet de réviser toutes les compétences essentielles en Python pour la création d’un graph !

 

Il n’y a plus qu’à croiser les doigts pour qu’un tel thème tombe aux concours !

Tu peux retrouver ici le méga-répertoire qui contient toutes les annales de concours et les corrigés. Tu peux également accéder ici à toutes nos autres ressources mathématiques !