Devoir sur la suite de Syracuse - Site Personnel de Arnaud de Saint

publicité
1
©Arnaud de Saint Julien - MPSI Lycée La Merci 2016-2017
Devoir maison n°2 d’informatique pour jeudi 3 novembre
Il est conseillé d’imprimer ses scripts Python et de bien les documenter.
Suite de Syracuse
Considérons l’encadré :
The following iterative sequence is defined for the set of positive integers :
n → n/2 (if n is even)
n → 3n + 1 (if n is odd)
Using the rule above and starting with 13, we generate the following sequence :
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
It can be seen that this sequence (starting at 13 and finishing at 1) contains
10 terms. Although it has not been proved yet (Collatz Problem), it is thought
that all starting numbers finish at 1.
Which starting number, under one million, produces the longest chain ?
NOTE : Once the chain starts the terms are allowed to go above one million.
Le but du devoir est de résoudre le problème proposé dans l’encadré. On traitera pour cela les questions
ci-dessous :
On note f la fonction définie sur N par f (n) =
n
2
si n est pair et f (n) = 3n + 1 sinon.
Si c ∈ N∗ , on note u la suite 1 récurrente définie par
u1 = c et ∀n ∈ N∗ , un+1 = f (un )
Avec c = 13, on a conformément à l’encadré
u1 = 13, u2 = 40, u3 = 20, u4 = 10, u5 = 5, u6 = 16, u7 = 8, u8 = 4, u9 = 2, u10 = 1.
On dit alors que la longueur de la chaîne formée par u vaut 10 et que la valeur maximale de cette chaîne est
u2 = 40.
1. Écrire un script Python qui code la fonction f .
2. Écrire une fonction longueur_chaine qui prend en argument un entier c ∈ N∗ et renvoie le plus entier n
tel que un = 1 (lorsque u1 = c).
Par exemple, longueur_chaine(13) renverra 10.
3. Écrire une fonction max_chaine qui prend en argument un entier c ∈ N∗ et renvoie la plus grande valeur
de un (lorsque u1 = c).
Par exemple, max_chaine(13) renverra 40.
4. Répondre à la question posée dans l’encadré.
1. Cette suite porte le nom de suite de Syracuse ou suite de Collatz. La conjecture de Syracuse est l’hypothèse mathématique
selon laquelle, n’importe quel entier au départ conduit à la valeur 1 au bout d’un certain temps. Personne n’a à ce jour réussi à
prouver cette conjecture.
Téléchargement