Python suite de Syracuse

Retrouver tous les sujets résolus.
Répondre
Martine

Python suite de Syracuse

Message par Martine » lun. 1 juin 2020 16:39

Bonjour,
J’ai un exercice à faire sur python, mais je suis bloquée à la question 4.b). L’énoncé me demande d’écrire un programme qui détermine la plus petite valeur de U0 qui donne un temps de vol supérieur à 100. Cependant je n’arrive pas à trouver de programme. Pourriez-vous m’aider ?

Voici l’énoncé :
On appelle Syracuse une suite Un d’entiers naturels définis de la manière suivante : le premier terme U0 est un entier naturel non nul que l’on pourra choisir ; pour tout entier naturel n, Un+1= Un/2 si Un est pair, Un+1=3Un+1 sinon.
On appelle temps de vol de la suite l’indice du premier terme de la suite qui vaut 1.

Merci
sos-math(21)
Messages : 10348
Enregistré le : lun. 30 août 2010 11:15

Re: Python suite de Syracuse

Message par sos-math(21) » lun. 1 juin 2020 17:08

Bonjour,
en programmation, il est intéressant de travailler en décomposant le problème posé en sous problèmes.
Le premier problème consiste à construire, pour un entier donné \(u_0\), la liste des termes de la suite de Syracuse de premier terme \(u_0\).
Il s'agit donc de construire une fonction python \(syracuse(u_0)\) prenant en paramètre \(u_0\) et calculant successivement les termes de la suite TANT QUE ces termes ne tombent pas sur la valeur 1 (une fois qu'on arrive sur 1, la suite "stagne" sur 1).
Les termes calculés seront stockés dans une liste dont la longueur correspondra au temps de vol.
Une implémentation pourrait donc être la suivante :

Code : Tout sélectionner

def suite_syracuse(u_0):
    suite = [u_0]
    u = u_0
    while u != 1 :
        if u % 2 == 0 :
            u = u // 2
        else:
            u = 3 * u + 1
        suite.append(u)
    return suite
Il te restera ensuite à calculer successivement les listes de Syracuse partant des entiers successifs 1,2, 3.... et de regarder leur temps de vol. TANT QUE celui-ci est inférieur ou égal à 100, on passe à l'entier suivant.
Je te laisse faire le début, sachant que tu devrais trouver comme premier entier 27, avec un temps de vol de 112.
Bonne continuation
Répondre