Python en Mathématiques - Niveau 2

Suite de Syracuse

Plus tard ! Le contenu de cette page peut être travaillé en seconde lecture.

Cette page présente un travail complet qui peut être donné en travail en classe ou à la maison.

Présentation du problème

On considère le programme de calcul suivant :

  • On choisit un entier naturel $n$ non nul comme valeur de départ.
  • Si cette valeur est paire, on calcule sa moitié.
  • Si cette valeur est impaire est impaire, on calcule $3 n+1$.
  • On recommence avec l'entier obtenu pour obtenir une liste d'entiers...
  1. On part de l'entier 40.
    Déterminer « à la main » la liste des 15 nombres obtenus avec ce programme de calcul (40 est le premier nombre de cette liste).
  2. On part de l'entier 23.
    Déterminer « à la main » la liste des 20 nombres obtenus avec ce programme de calcul (40 est le premier nombre de cette liste).
  3. Quelle conjecture peut-on faire ?
  • Question 1°/
  • Question 2°/
  • Question 3°/

40 est pair, on le divise donc par 2. On obtient le nombre 20. En poursuivant ce raisonnement, on obtient la liste :
40 − 20 − 10 − 5 − 16 − 8 − 4 − 2 − 1 − 4 − 2 − 1 − 4 − 2 − 1

23 est impair, on le multiplie par 3 et on ajoute 1. On obtient 70. En poursuivant ce raisonnement, on obtient la liste :
23 − 70 − 35 − 106 − 53 − 160 − 80 − 40 − 20 − 10 − 5 − 16 − 8 − 4 − 2 − 1 − 4 − 2 − 1 − 4

Il semble qu'à partir d'un moment, la liste de nombre se mette à « boucler » sur les trois nombres 4 − 2 − 1.

Calcul automatisé

  1. Définir en Python la fonction suivant() de paramètre l'entier strictement positif n, et qui renvoie le nombre suivant obtenu grâce au programme de calcul.
  2. Définir en Python la fonction syracuse() de paramètres n et nb. L'entier n est la valeur de départ et l'entier nb est le nombre de termes de la liste renvoyée d'après le programme de calcul.
  3. Tester les appels syracuse(20, 10) et syracuse(34, 13).
  • Réponses

		
		

Temps de vol

On appelle «temps de vol » de l'entier $n$ le nombre de valeurs calculées dans cette suite de nombres jusqu'à obtenir 1.

  1. Justifier que le « temps de vol » de 4 est 2.
  2. Déterminer la valeur des « temps de vol » de 10 puis de 35.
  3. Définir en Python la fonction vol() de paramètre l'entier $n$ qui est la valeur choisie au départ. Cette fonction renvoie le vol sous forme de liste de n à 1.
  4. En déduire le « vol » puis le « temps de vol » de 47.
  • Question 1°/
  • Question 2°/
  • Questions 3°/ et 4°/

En partant de 4, il suffit de calculer deux nombres pour arriver à 1. La suite est « 4 − 2 − 1» donc le «temps de vol » de 4 est 2.

La suite est : 10 − 5 − 16 − 8 − 4 − 2 − 1. Ainsi, le « temps de vol » de 10 est 6.

On a : 35 − 106 − 53 − 160 − 80 − 40 − 20 − 10 − 5 − 16 − 8 − 4 − 2 − 1. Ainsi, le « temps de vol » de 35 est 13.


		
		

Recherche de performance

On appelle « altitude maximale » de l'entier $n$ la valeur maximale atteinte lors du « vol » de l'entier $n$.

  1. Quelle est l'altitude maximale si on choisit 15 au départ ?
  2. Définir la fonction alt_maxi() qui renvoie l'altitude maximale atteinte à partir de la valeur n saisie en paramètre.
  3. En déduire l'altitude maximale de 47.
  4. Enfin, concevoir une fonction qui renvoie l'entier naturel inférieur à 1000 qui admet le plus grand « temps de vol ».
    Quel est cet entier et son temps de vol ?
  • Question 1°/
  • Questions 2°/ et 3°/
  • Question 4°/

En partant de 15, on obtient la liste :
15 − 46 − 23 − 70 − 35 − 106 − 53 − 160 − 80 − 40 − 20 − 10 − 5 − 16 − 8 − 4 − 2 − 1
Donc l'altitude maximale est 160 si on choisit 15 au départ.


		
		

Dans la fonction plus_gd_vol(), N représente le nombre à ne pas dépasser (1000 pour répondre à l'exercice).

  • On indique arbitrairement que le plus grand temps de vol tps_vol_maxi vaut 1 et qu'il est obtenu pour une valeur initiale depart_du_maxi de 1.
  • On parcourt ensuite tous les entiers de 2 à N-1 et on détermine la liste de son vol ainsi que son « temps de vol » (la taille du vol moins 1).
  • Lorsque ce nouveau temps de vol est supérieur à tps_vol_maxi, il devient le nouveau tps_vol_maxi. On actualise aussi la nouvelle valeur initiale depart_du_maxi de ce temps de vol maximal.