(C) Copyright Franck CHEVRIER 2019-2020 http://www.python-lycee.com/
Pour exécuter une saisie Python, sélectionner la cellule et valider avec SHIFT+Entrée.
En langage Python, l’écriture a%b permet de renvoyer le reste de la division euclidienne de a par b (où a et b sont des nombres entiers positifs, b non nul).
0. Question préliminaire : Si a est une variable contenant un nombre entier positif :
a=18 #Modifier cette valeur pour les tests
a%2
Définition de la suite de Syracuse associée à un nombre $a$ :
A partir d’un entier non nul $a$, on peut construire une suite de nombres de la façon suivante :
$u_0=a$ et $u_{n+1} = \begin{Bmatrix} \frac{u_n}{2} & \hbox{ si $u_n$ est pair} \\ 3u_n+1 & \hbox{ si $u_n$ est impair} \end{Bmatrix} $(chaque terme de la suite est obtenu en divisant le précédent par 2 si celui-ci est pair, et en le multipliant par 3 et en ajoutant 1 s’il est impair)
La vidéo ci-dessous présente la construction d'une suite de Syracuse.
La figure dynamique qui suit permet de représenter une suite de Syracuse.
(Pour faire apparaître et activer la figure dynamique, sélectionner la cellule et valider avec SHIFT+Entrée).
#Sélectionner cette zone puis SHIFT+ENTREE
from IPython.display import display, HTML ; display(HTML('fig_dyn_GeoGebra/Syracuse.html'))
1. Calculer, à la main, les 6 premiers termes de la suite de Syracuse associée au nombre 17, et vérifier à l'aide de la figure dynamique précédente.
2. Ecrire une fonction Python suiv_Syracuse(p) :
NOTE : Pour s’assurer que la valeur renvoyée soit de type int, on pourra écrire la division sous la forme // qui renvoie le quotient entier d’une division.
# Ecrire la fonction
# Tester ici la fonction
3. On considère la fonction Python Deb_Syracuse(a) suivante :
def Deb_Syracuse(a) :
L=[a]
for k in range(3) :
n=len(L)
suiv=suiv_Syracuse(L[n-1])
L.append(suiv)
return L
k | suiv | L |
---|---|---|
/ | [ 7 ] | |
0 | ||
1 | ||
2 | ||
Deb_Syracuse(7)
4. Ecrire une fonction Python Tab_Syracuse(a,N) :
# Ecrire la fonction
# Tester la fonction
Notion de vol associé à un nombre a :
On appelle vol correspondant à a, la liste des valeurs obtenues par la suite de Syracuse à partir de a, et s’arrêtant au premier terme valant 1. (*)
On appelle durée du vol le nombre de termes de la liste, et on appelle altitude maximale la plus grande valeur de cette liste.
5. Compléter, à la main, la suite de nombres obtenus à la question 1) pour obtenir le vol correspondant au nombre 17. Quelle est la longueur de ce vol ? Quelle est l’altitude maximale de ce vol ?
6. Ecrire une fonction Python Vol_Syracuse(a) :
# Ecrire la fonction
# Tester la fonction
7. Expliquer, pour chacune des instructions, ce que représente le résultat obtenu.
v=Vol_Syracuse(137)
v
max(v)
len(v)
8. Prolongements possibles :
Adapter la fonction pour qu’elle renvoie la plus petite valeur a dont le vol atteint une altitude au moins égale à M, où M est passé en argument.__
Adapter la fonction pour qu’elle renvoie la plus petite valeur a dont la durée de vol est supérieure à T, où T est passé en argument.__
Adapter la fonction pour qu’elle renvoie la valeur de a inférieure à N pour laquelle la durée de vol est maximale, où N est passé en argument.__
Adapter la fonction pour qu’elle renvoie la valeur de a inférieure à N pour laquelle l’altitude atteinte est maximale, où N est passé en argument.__
# Ecrire les fonctions
# Tester les fonctions
(*) NOTE: La conjecture de Syracuse stipule que quelle que soit la valeur a choisie, la suite de Syracuse finira par « atterrir », c'est-à-dire qu’elle atteindra au bout d’un nombre fini d’itérations la valeur 1. A ce jour, cette conjecture n’a jamais été démontrée, mais elle a été vérifiée pour tous les entiers inférieurs à $2^{62}≈4,6×10^{18}$… avec des ordinateurs évidemment.
Lothar Collatz (1910 – 1990) est à l’origine de cette conjecture
(C) Copyright Franck CHEVRIER 2019-2020 http://www.python-lycee.com/