Lycée Victor Hugo MP 2016-2017
T.P. Récursivité 3
Le mystère de la somme des cubes des chiffres
On s’intéresse ici à une suite (un)définie par :
u0=aet nN, un+1 =f(un)
aest un entier naturel et fla fonction qui à tout entier naturel associe la somme des cubes
de ses chiffres.
Théorème 1 Si aest un multiple de 3non nul, alors la suite obtenue est, à partir d’un certain
rang, constante et égale à 153.
Le but de la première partie est de démontrer ce théorème avec l’aide de l’ordinateur. La
seconde partie aura pour but de s’intéresser au cas où an’est pas un multiple de 3.
I Vérification du théorème concernant les multiples de 3
On définit donc naturellement la fonction f:NNqui à tout entier naturel associe la
somme des cubes de ses chiffres en base 10.
1. Qu’a de particulier le nombre 153 ?
2. Écrire le code Python de la fonction récursive f.
In [2]: f (1999)
Out[2]: 2188
3. Écrire le code Python de la fonction récursive test de paramètre entier naturel aet qui
rend le booléen correspondant à la vérification du théorème pour l’entier afixé.
On supposera (ou imposera par la fonction) que aest un entier naturel divisible par 3.
In [4]: test (1998)
Out[4]: True
4. Écrire le code Python de la fonction récursive verificationTheoreme de paramètre
entier naturel net qui rend le booléen correspondant à la vérification du théorème pour
tout entier naturel non nul ainférieur ou égal à net divisible par 3.
In [6]: verificationTheoreme(2187)
Out[6]: True
5. (Question plus difficile : y réfléchir hors T.P.) Montrer à l’aide d’arguments supplémentaires
que par l’appel verificationTheoreme(2187), le théorème se trouve ainsi démontré.
On a ici un exemple de démonstration à l’aide de l’ordinateur. L’humain s’est chargé d’une
partie du raisonnement et a laissé la main à l’ordinateur pour la tâche fastidieuse des dernières
vérifications nécessaires.
1
Lycée Victor Hugo MP 2016-2017
II Etude générale
Dans la suite, en lien avec ce qui a été écrit à la question ?? du paragraphe ??, on travaille
dans l’intervalle J0,2188K. On cherche à approfondir ce qui se passe pour tous les nombres de
cet intervalle (y compris les nombres non multiples de 3) afin d’établir de nouveaux théorèmes.
1 Points fixes de la fonction
Déterminer à l’aide de Python (on pourra créer une fonction sans paramètre) les points fixes
de la fonction f.
In [8]: po intsFix es ()
Out [8]: [0 , 1, 153 , 370 , 371 , 407]
2 Etude des itérés et recherche du vol de longueur maximale
1. Écrire le code Python de la fonction iteres qui rend la liste des itérés du paramètre a
par la fonction farrêtée lorsqu’on retombe sur un élément déjà rencontré (l’élément déjà
rencontré ne faisant pas partie de la liste).
In [10]: iteres (14)
Out [10]: [14 , 65 , 341 , 92 , 737 , 713 , 371]
In [11]: iteres(1630)
Out [11]: [1630 , 244 , 136]
2. L’élément terminal de la liste des itérés est-il nécessairement un point fixe.
3. Écrire le code Python de la fonction volMax sans paramètre et qui indique pour quelle
valeur de l’entier aJ0,2188Kla liste dés itérés a une longueur maximale, ainsi que la
liste des itérés de ce nombre.
In [21]: volMax ()
le vol maximal est obtenu pour a = 177 et a pour lon gue ur 14
la lis te des it é r és de 177 est la su iv ant e :
[177,687,1071,345,216,225,141,66,432,99,1458,702,351,153]
3 Liste des éléments terminaux
On appelle élément terminal tout entier qui peut être le dernier élément d’une liste des itérés.
Ainsi sur l’exemple cité plus haut, on voit que 371 et 136 sont des éléments terminaux.
1. Quel type d’élément est nécessairement un élément terminal ?
2. Si un élément n’est pas du type précédent et est terminal, que peut-on déduire comme
nouveaux éléments terminaux ? Décrire le phénomène, parler de cycle.
3. Écrire le code Python de la fonction listeTerminaux qui rend la liste de tous les éléments
terminaux.
In [48]: listeTerminaux()
Out [48]:
[0,1,371,153,250,370,160,407,919,133,217,244,352,136,55,1459]
4 Liste des classes de terminaux
On définit sur l’ensemble des éléments terminaux une relation Rdéfinie par :
xRyx∈ {itérés(y)}]
Deux éléments liés par cette relation (d’équivalence) sont dans la même classe.
2
Lycée Victor Hugo MP 2016-2017
1. Écrire le code Python d’une fonction récursive reunionListes dont le paramètre est une
liste de listes et qui rend la liste obtenue par réunion de toutes les listes du paramètre. Les
divers éléments des listes du paramètre sont supposés tous distincts.
La fonction précédente sera utilisée pour la fonction suivante.
2. Écrire le code Python de la fonction listeClasses sans paramètre et qui rend la liste des
classes d’éléments terminaux.
In [57]: li steCl as ses ()
Out [58]: [[0] ,[1] ,[371] ,[153] ,[250 , 133 , 55] ,[370] ,
[160 ,217 ,352] ,[407] ,[919 , 1459] ,[244 , 136]]
5 Etude finale
A la suite de l’étude précédente, on a trouvé 10 classes de terminaux. On définira dans le
shell en la notant LC la liste de classes qui deviendra une constante pour la suite du travail.
Un élément nJ0,2188Ket plus généralement nNest dit de type ksi l’élément terminal
de la liste de ses itérés est dans LC[k].
1. Écrire le code Python de la fonction type dont le paramètre est un entier nJ0,2188K
et qui rend son type défini précédemment.
In [60]: type(2015)
Out [60]: 2
In [61]: type(2016)
Out [61]: 3
2. Écrire le code Python de la fonction caracteristiqueElementsDeType de paramètre
kJ0,9Ket qui rend un triplet donnant le numéro du type, la classe d’éléments ter-
minaux correspondante et le nombre d’éléments de ce type.
In [70]: for kin range (10):
...: print ( c ar ac ter is tiq ue El eme nt sDe Ty pe ( k) )
...:
(0 , [0] , 1)
(1 , [1] , 39)
(2 , [371 ] , 649)
(3 , [153 ] , 729)
(4 , [250 , 133 , 55] , 123)
(5 , [370 ] , 372)
(6 , [160 , 217 , 352] , 102)
(7 , [407 ] , 80)
(8 , [919 , 14 59] , 72)
(9 , [244 , 136] , 22)
3. Expliquer le résultat de l’appel caracteristiqueListeElementsDeType(3) ci-dessus.
4. Écrire le code Python de la fonction listeElementsDeType de paramètre kJ0,9Ket
qui rend la liste des éléments du type donné en paramètre.
In [82]: listeElem en ts De Ty pe (9)
Out [82]: [ 136 , 163 , 244 , 316 , 361 , 424 , 442 , 613 , 631 ,1036 ,1063 ,
1306 ,1360 ,1489 ,1498 ,1603 ,1630 ,1849 ,1894 ,1948 ,1984 ,2044]
5. Après avoir remarqué (voire démontré) que f(n)n[3], établir à l’aide des résultats
obtenus de nouveaux théorèmes concernant cette fois les nombres congrus à 1 ou à 2
modulo 3.
3
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !