Lycée Roland Garros - BCPST 1 Informatique TP INFO Hors-série. Quelques dés en algorithmique Exercice 1 La suite de Syracuse La suite de Syracuse est une suite de nombres entiers dénie par u0 ∈ N et pour n ∈ N, ( un /2 si un est pair, un+1 = 3un + 1 si un est impair 1. Écrire une fonction syracuse(u0,n) qui calcule le terme un de la suite. 2. Écrire une fonction syracuse_bis(u0,n) qui renvoie la liste des n premiers termes de la suite (un ). 3. La célèbre conjecture de Syracuse arme que : pour toute valeur de u0 , il existe n ∈ N tel que un = 1. Observez que cette phrase est vraie pour des valeurs de u0 que vous choisirez au hasard. 4. Selon cette conjecture, la suite nit toujours par boucler sur les valeurs 4, 2, 1, 4, 2, 1, 4, 2, 1, . . . mais avant cela il s'est passé un certain nombre d'itérations. Écrire : • une fonction temps_de_vol(u0) qui renvoie le premier entier n tel que un = 1. • une fonction hauteur_de_vol(u0) qui renvoie la valeur maximale at- teinte par la suite. 5. Écrire une fonction qui renvoie l'entier u0 ≤ 100 pour lequel le temps de vol de la suite est maximal. 1 Exercice 2 Nombres parfaits, abondants, décients. 1. Ecrivez un programme Python qui demande à l'utilisateur de saisir un entier naturel n et ache la liste de ses diviseurs. Définition : • • • un nombre est dit parfait si la somme de ses diviseurs est égale au double de ce nombre, abondant si cette somme est strictement supérieure au double de ce nombre, décient si cette somme est strictement inférieure au double de ce nombre. Par exemple, 6 est parfait, 12 est abondant, 5 est décient. 2. Écrivez une fonction qui qui demande à l'utilisateur de saisir un entier n et ache un message indiquant si l'entier naturel saisi est parfait, abondant ou décient. 3. Quel est le plus petit nombre abondant impair ? 4. Quelle proportion des nombres entre 1 et 1000 sont abondants ? décients ? Exercice 3 Le triangle de Pascal 1. Écrire une fonction triangle(n) qui ache les n premières lignes du triangle de Pascal ? Vous vous servirez de la relation de Pascal. Attention : les colonnes doivent être bien alignées. Par exemple triangle(8) achera 1 1 1 1 1 1 1 1 1 2 3 4 5 6 7 1 3 1 6 4 10 10 15 20 21 35 1 5 1 15 6 35 21 1 7 1 2. Application. Écrire une fonction somme(n) qui renvoie la valeur de sn = n X 1 n . k=0 k Illustrer le résultat montré en TD : lim(sn ) = 2. 2 Exercice 4 La suite lexicographique de Conway Le mathématicien J.H. Conway a inventé une suite de nombres célèbre. En voici les premiers termes : 1 11 21 1211 111221 312211 13112221 1113213211 31131211131221 ........................ 1. Avez-vous compris la logique qui relie les termes de cette suite ? Écrire la ligne suivante. 2. Créer une fonction conway(n) qui produit l'achage des n premières lignes de cette suite. Faire une variante qui renvoie la liste des chires de la n-ème ligne. 3. Expliquer pourquoi aucun chire supérieur ou égal à 4 n'apparaîtra. 4. Pouvez-vous, à l'aide d'une fonction, conrmer l'armation suivante, lue sur Wikipédia : en moyenne, les termes de la suite possèdent ' 50% de chires 1, 31% de et 19% de 3 2 5. Soit `n le nombre de chires qui composent la n-ème ligne. On a par exemple `1 = 1, `2 = 2, `3 = 2, `4 = 4, `5 = 6, . . . = λ où λ ≤ 1, 303577269.... On lit sur Wikipédia : Conway a démontré que lim `n+1 `n Pouvez-vous illustrer ce résultat avec Python ? 3 Exercice 5 Courses de nombres premiers Hormis 2, tous les nombres premiers sont évidemment impairs. Il y en a donc deux sortes : • ceux de la forme 4k + 1 (équipe A), • ceux de la forme 4k − 1 (équipe B ). Une question intéressante est alors la suivante : y a t-il plus de nombres premiers dans l'équipe A ou dans l'équipe B ? 1. Écrire une fonction prim(n) qui renvoie True si n est premier, et False sinon. 2. On désire observer la course de l'équipe A contre l'équipe B . Créer une fonction course(N) qui renvoie deux listes A = [A1 , A2 , . . . , AN ] et B = [B1 , B2 , . . . , BN ] où An et Bn sont dénis pour n ≤ N par : An = Card({k ∈ [[1, n]] : 4k + 1 est premier}) Bn = Card({k ∈ [[1, n]] : 4k − 1 est premier}) 3. Représenter graphiquement les listes A et B. Pouvez-vous émettre une conjecture sur le résultat de la course (quelle équipe semble prendre la tête) ? Exercice 6 Les mystérieux nombres de Lychrel Un nombre entier est appelé palindrome s'il se lit de la même manière dans les deux sens. Par exemple 95459 est un palindrome. A tout nombre n ∈ N on peut associer son renversé n obtenu en inversant l'ordre de ses chires. Par exemple le renversé de 124 est 421. On remarque qu'en ajoutant un nombre à son renversé on obtient parfois un palindrome : 124 + 421 = 545. Mais ce n'est pas toujours le cas : 1293 + 3921 = 5214 mais on peut espérer qu'en recommençant l'opération susamment de fois on nisse toujours par tomber sur un palindrome. Dans l'exemple précédent par exemple en ajoutant à nouveau le renversé du nombre obtenu fois on obtient : 5214 + 4125 = 9339. 4 Question ouverte : existe t-il des nombres pour lesquels en répétant l'opération d'ajouter le renversé, on n'obtienne jamais de palindrome ? De tels nombres, dont l'existence n'a pas été prouvée, sont appelés nombres de Lychrel. 1. Écrire une fonction palind(n) qui renvoie True ou False selon si n est un palindrome ou non. 2. Écrire une fonction ajoute_renverse(n) qui renvoie la somme de n et de son renversé. 3. Écrire une fonction nb_etapes(n) qui renvoie le nombre d'étapes nécessaires, en partant de n, pour tomber sur un palindrome. 4. Vérier que les 100 premiers nombres entiers ne sont pas des nombres de Lychrel. 5. Les mathématiciens suspectent 196 d'être le premier nombre de Lychrel. Comment se comporte votre fonction nb_etapes(n) pour n = 196 ? 6. Pouvez-vous porter des soupçons sur d'autres nombres ? Exercice 7 La persistance multiplicative On appelle persistance multiplicative d'un nombre n ∈ N, le nombre d'étapes nécessaires pour aboutir à un nombre à un seul chire, dans le processus qui consiste à calculer à chaque étape le produit des chires composant le nombre. Par exemple. En partant de n = 426712, on a : 4 × 2 × 6 × 7 × 1 × 2 = 672 6 × 7 × 2 = 84 8 × 4 = 32 3×2=6 La persistance multiplicative de 426712 vaut donc 4. Question ouverte : existe t-il des nombres de persistance multiplicative arbitrairement grande ? 1. Écrire une fonction suivant(n) qui calcule le produit des chires composant l'entier n. 2. Écrire une fonction persistance(n) qui calcule la persistance multiplicative de n. 3. Que vaut la persistance multiplicative du nombre n = 277777788888899 ? 4. Ce nombre détient pour l'instant le record de la plus grande persistance multiplicative (au sens où on n'en a encore trouvé aucun de persistance multiplicative supérieure à celui-ci). Pouvez-vous observer ceci avec votre programme ? 5