La suite de Syracuse
Présentation
La suite de Syracuse est une suite de nombres dont le 1er terme est un entier positif non nul et dont les termes suivants son calculés comme suit :
-
Si le terme précédent est pair, on le divise par 2 pour obtenir le terme courant
-
S’il est impair, on le multiplie par 3 et on ajoute 1 pour obtenir le terme courant.
-
Et on recommence l’opération avec le résultat pour calculer le terme suivant
Ce qui est remarquable avec cette suite, c’est que, quel que soit le nombre entier fourni au départ, on finit toujours par obtenir 1 au bout d’un certain nombre d’itérations. Cependant personne n’a pour l’instant réussi à démontrer que c’était vrai pour tous les entiers.
Ce genre de situation mathématique que l’on accepte comme vrai sans pour autant avoir pu le démontrer est ce qu’on appelle une conjecture. |
✎ Travail n° 1 Apport de connaissances
🎯 Travail à faire :
-
Consulter le document Suite et conjecture de Syracuse / Algorithme
Application
💻 Travail n° 3 Représentation graphique dans un tableur
🎯 Travail à faire :
-
Lancer le tableur Excel
-
Mettre les valeurs 1 à 18 dans les cellules B2 à B19. Pour cela :
-
Mettre la valeur 6 dans la cellule C2
-
Mettre la formule
=SI(MOD(C2;2)=0;C2/2;3*C2+1)
dans la cellule C3La fonction
MOD(N1;N2)
d'Excel retourne le reste de la division entière de N1 par N2 ⇒ Si elle retourne 0, c’est que N1 et multiple de N2. -
Positionner la souris dans le coin inférieur droit de la cellule C3 de façon à ce que le signe ‘+’ apparaisse puis étendre la sélection jusqu’à la cellule C19 en restant appuyé sur le bouton gauche de la souris.
-
Copier de la même façon la cellule C3 en D3 puis de D3 à D19
-
Mettre la valeur 11 dans D2
-
Répondre aux questions :
-
Quels sont les “temps de vol” de ces 2 suites de Syracuse avec valeurs initiales 6 et 11 ?
-
Quelles sont les “altitudes maximales” pour ces 2 mêmes suites ?
-
-
Tracer les représentations des suites dans Excel
💻 Travail n° 4 Représentation graphique en Python
On désire tracer en Python la représentation graphique de la suite de Syracuse après avoir demandé à l’utilisateur de fournir sa valeur initiale.
Le tracé de cette courbe doit s’étendre uniquement sur le “temps de vol” de la suite.
On vous donne le code partiel du script Python :
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
print(">>>> Suite de Syracuse <<<<\n");
# Saisie valeur initiale
valeurInitiale = int(input("Saisir la valeur initiale (> 1) : "))
# Calcul des termes de la suite
À COMPLÉTER
# Création d'une figure
fig = plt.figure()
# Ajout de la courbe de la tension aux bornes du condensateur dans la figure
courbeSuite = fig.add_subplot(1 # nrows
, 1 # ncols
, 1 # index
, xscale='linear'
, xlabel=r'$itérations$'
, ylabel=r'$u_n$'
)
# Tracé de la courbe
courbeSuite.xaxis.set_major_locator(ticker.MaxNLocator(integer = True))
courbeSuite.plot(range(1, nbIterations+1), suiteSyracuse, "blue")
# Configuration des grilles
plt.grid(which='major', color='black')
plt.minorticks_on()
plt.grid(which='minor', color='lightgray')
# Affichage de la courbe
plt.show()
🎯 Travail à faire :
-
Compléter le code pour calculer les termes de la suite de Syracuse jusqu’à atteindre son “temps de vol”.
Consignes :
-
La valeur initiale de la suite est fournie par l’utilisateur et stockée dans la variable
valeurInitiale
-
Les termes de la suite seront stockés dans une liste Python nommée
suiteSyracuse
-
Le nombre d’itérations nécessaires pour atteindre le “temps de vol” sera stocké dans une variable nommée
nbItération
-
-
Que peut-on dire sur l’allure de la courbe lorsqu’on fournit une valeur initiale qui est une puissance de 2 ?
💻 Travail n° 5 Recherche “temps de vol” et “altitude” maximaux
🎯 Travail à faire :
-
Faire un script Python qui détermine la valeur initiale — comprise entre 1 et 100 — pour laquelle le “temps de vol” de la suite de Syracuse est maximal.
-
Il suffit de :
-
reprendre la partie du code de l’exercice précédent qui calcule les termes de la suite de Syracuse
-
répéter le traitement pour des valeurs initiales allant de 1 à 100
-
stocker le “temps de vol” de chacun de ces traitements (→ nombre d’itérations nécessaires pour que la suite atteigne la valeur 1) dans une liste Python
-
chercher et afficher le maximum de cette liste
-
-
L’indice du maximum d’une liste Python peut être obtenue avec l’expression :
uneListe.index(max(uneListe))
Résultat attenduTemps de vol max.(-> 118) atteint pour valeur initiale 97
-
-
Compléter le script pour qu’il détermine également la valeur initiale — toujours comprise entre 1 et 100 — qui mène à “l’altitude” maximale dans la suite de Syracuse.
Résultat attenduAltitude max.(-> 9232) atteinte pour valeur initiale 27
🞄 🞄 🞄