A partir de la liste L des nombres entiers allant de 1 à n, on élimine itérativement les multiples
de 2 (sauf 2), puis les multiples de 3 (sauf 3), etc. jusqu’aux multiples de n-1.
Nous allons mettre en œuvre cet algorithme en utilisant MAPLE comme langage de
programmation. Pour ce faire, nous considérons une liste MAPLE de n booléen initialement
tous égaux à true. L’élimination des nombres multiples (évoqué précédemment) consiste à
affecter les booléens correspondant à false. A la fin de l’algorithme seuls les nombres
premiers seront marqués par un true.
a) Ecrire une fonction crible qui retourne un tableau de n booléens tels que l’on ai vrai dans
chaque case i du tableau si le nombre i est premier. Il faut bien entendu utiliser
l’algorithme du Crible d’Erathostène.
b) Ecrire une fonction qui prend en entrée le tableau précédent et affiche les nombres
premiers (à partir du tableau).
> buildTab := proc(n::posint)
local tab::array,
i ::integer;
tab := array(1..n);
for i from 1 to n
do
tab[i]:=true;
od:
return tab;
end:
crible := proc(n::posint)
local tab::array,
i ::integer,
val::integer;
#Construction du tableau initial
tab := buildTab(n);
for val from 2 to n
do
for i from val+1 to n
do
if ((i mod val) = 0)
then
tab[i] := false;
fi
od:
od:
return tab;
end:
> afficheTab := proc(tab::array) #Tableau de booléen en entrée
local i ::integer,
taille::integer,
lst ::list;
lst := convert(tab, 'list');
taille := nops(lst); #Le nops sur tab ne donnait 1 ?!
for i from 1 to taille
do
if (tab[i])
then
printf("%d, ", i);
fi:
od:
printf("\n");
end:
> tab := crible(100):
afficheTab(tab);
1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89,
97,