fi;
compt;
end:
> Z:=petitsPremiers2(500):
> seq(premier[i],i=1..Z);
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, , , , , , , , , , , , , , , , , , , , , , , , ,
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191, , , , , , , , , , , , , , , , , ,
193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283, , , , , , , , , , , , , , , , , ,
293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401, , , , , , , , , , , , , , , , , ,
409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499, , , , , , , , , , , , , , ,
Question 4: Crible d'Erathostène
La procédure proposée suit exactement le principe du crible d'Erathostène. On met en évidence
les multiples d'un entier r donné (qui ne sont donc pas premiers) en affectant la valeur 1 à
Tab[ir].
> petitsPremiers3:=proc(n)
local Tab,k,i,r,s ;
global premier;
Tab:=array[2..n];for k from 2 to n do Tab[k]:=0;od;
# initialisation du tableau
i:=1;
while i <= n do
s:=i+1; while Tab[s]=1 do s:=s+1;od;
# Recherche de l'entier premier suivant i
i:=s;
r:=2;
while i*r<= n do Tab[i*r]:=1; r:=r+1;od;
# suppression des multiples de i
od;
s:=1; for k from 2 to n do if Tab[k]=0 then premier[s]:=k;
s:=s+1;fi;od;
s-1;end:
> Z:=petitsPremiers3(200):
> seq(premier[k],k=1..Z);
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, , , , , , , , , , , , , , , , , , , , , , , , ,
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191, , , , , , , , , , , , , , , , , ,
193 197 199, ,
Question 5: Factorisation d'un entier
Mise en place de l'algorithme proposé dans l'énoncé.
> factoriser:=proc(n)
local N,i,j,p,m;
global premier, facteur;
petitsPremiers3(n);