
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,