TP INFO Hors

publicité
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
Téléchargement