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.
Principe : si
2
0 1 2 0
.. ... b
N
NN
n a a b a b a b a a  
,
0
a
est le reste de la division de n par b
et
21
1 1 2 3 1
.. ... b
N
NN
n a a b a b a b a a
 
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
100 4 32 64
..a a a a
, sachant que
 
2
2
2
32 4
aa



et
 
2
64 32
aa
.
L’algorithme s’effectuera de la manière suivante :
divisions
successives
100
25
impair
12
6
3
impair
1
impair
de n par 2
élévations
successives
de a au
carré
a
2
a
4
a
8
a
16
a
32
a
64
a
résultat
1
4
a
4
a
4
a
4 32 36
a a a
4 32 64 100
a a a a
É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
2002005
2
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 :
 
 
 
 
0 1 0 1 2 3 1
... .....
n
n n n
P x a a x a x a x a x a x a x a xa
   
Écrire une procédure horner:=proc(a,x,n) qui retourne
 
0
nk
ka k x
.
Comparer les temps de calcul avec un calcul normal (pour le test prendre
 
, 4, 100a k k x n  
).
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.
1 / 3 100%