TP 9

publicité
PCSI
TP MAPLE 9 : ALGORITHMES CLASSIQUES
1) Algorithme d’Euclide.
Il a été vu dans le TP8. Pouvez cette fois faire une version non récursive de la mise en œuvre
de cet algorithme ?
2) Algorithme de détermination de la primalité d’un naturel.
Rappeler pourquoi un entier n est premier ss’il ne possède aucun diviseur entre 2 et ………..
Écrire une procédure estpremier:=proc(n) qui aura la même fonction que isprime
Comparer les temps de calcul entre estpremier et isprime.
3) Algorithme de détermination de la liste des nombres premiers de 2 à n, dit algorithme du
crible d’Eratosthène.
Principe (essayer déjà sur feuille avec n = 50):
a) partir de la liste L des entiers de 2 à n.
b1) barrer dans cette liste tous les éléments qui sont multiples stricts du premier terme
b2) barrer dans la liste obtenue tous les éléments qui sont multiples stricts du
deuxième terme.
…
bk) barrer dans la liste obtenue tous les éléments qui sont multiples stricts du k-ième
terme.
c) s’arrêter lorsque le k-ième terme a un carré > n.
La liste L modifiée comporte alors tous les nombres premiers de 1 à n.
Écrire une procédure listePremiers:=proc(n) qui donne la liste des nombres
premiers de 1 à n.
Pour barrer dans la liste, vous utiliserez soit « minus » (il faudra alors convertir la liste en
ensemble par {op(L)}, soit « remove ».
4) Algorithme de décomposition d’un naturel dans une base.
b
Principe : si n  a0  a1b  a2b 2  ..  aN b N  a N ...a0 , a0 est le reste de la division de n par b
b
et n1  a1  a2b  a3b 2  ..  aN b N 1  aN ...a1 est le quotient dans cette division.
Écrire une procédure (récursive ou non) dec:=proc(n,b) retournant la séquence des
chiffres de n dans la base b. Utiliser « iquo » et « irem ».
5) Algorithme d’exponentiation rapide.
a) Écrire une procédure expol:=proc(a,n) retournant an.
b) Principe de l’algorithme d’exponentiation rapide.
Il consiste à décomposer n en somme de puissances de 2 (autrement dit à écrire n en base 2)
et d’en déduire un calcul de an par une suite d’élévations au carré successives.
Par exemple 100= 4 + 32 + 64 , donc a
100
 
a 64  a 32
2
  

 a .a .a , sachant que a   a 4

4
32
64
32
2 2
2

 et

.
L’algorithme s’effectuera de la manière suivante :
divisions
100
successives
50
25
impair
12
6
3
impair
1
impair
de n par 2
élévations a
successives
de a au
carré
résultat
1
a2
a4
a8
a16
a 32
a 64
1
a4
a4
a4
a 4 a 32  a 36 a 4 a 32 a 64  a100
Écrire une procédure (récursive, ou non) expor:=proc(a,n) retournant an et utilisant
cet algorithme.
Comparer les temps de calcul entre « expol » et « expor ».
c) Pour ceux qui connaissent les congruences : appliquer la méthode de
l’exponentiation rapide pour obtenir le reste de la division de 22002005 par 101.
6) La bonne vieille division.
Programmer une fonction f:=proc(a,b,k) qui retourne une liste formée de la partie
entière du quotient de a par b, puis les k premières décimales du quotient (par exemple,
f(22,7,5)=[3,1,4,2,8,5]) ; les seules fonctions autorisées sont , ,  , iquo, et irem.
7) L’extraction de racines carrées.
Programmer une fonction f:=proc(n,k) qui retourne la liste formée de la partie entière du
quotient de la racine carrée de n, puis de ses k premières décimales ; les seules opérations
autorisées sont , ,  .
8) Algorithme de division euclidienne des polynômes.
A et B étant donnés, déterminer Q et R.
Degré d’un polynôme : degree
Coefficient dominant d’un polynôme : lcoeff
9) Algorithme de Horner pour calculer les valeurs d’un polynôme.


Principe : P  x   a0  a1 x  ...  an xn  a0  x a1  x a2  x  a3  .....  x  an1  xan  
Écrire une procédure horner:=proc(a,x,n) qui retourne
n
 a k  x
k

.
k 0
Comparer les temps de calcul avec un calcul normal (pour le test prendre
a  k   k , x  4, n  100 ).
9) Algorithme glouton pour la décomposition d’un rationnel > 0 en somme de fractions
égyptiennes.
Principe : retrancher la plus grande fraction égyptienne inférieure ou égale à x et
recommencer jusqu’à ce qu’on obtienne zéro.
Écrire une procédure glouton:=proc(x) qui retourne la liste des fractions égyptiennes
obtenues par cet algorithme ; leur somme doit être égale à x.
Exercice : démontrer que cet algorithme se termine toujours.
Autres algorithmes, pour mémoire :
- algorithme d’insertion pour le tri (cf. TP 8),
- algorithme de calcul approché d’une solution d’une équation par dichotomie.
- algorithme du pivot de Gauss pour la résolution d’un système linéaire.
-algorithme de Schmidt pour la détermination d’une base orthonormée.
Téléchargement