######################## PROBLÈME 2: ######################### #@# a) plist := proc(n) local i, L; L := 2; for i from 3 to n by 2 do if isprime(i) then L := L,i; fi; od; [L]; end; #@# autre: plist := n -> select( isprime, [seq(i, i=1..n)] ); #@# b) plist2 := proc(n) local i,j, L, T; T := array([true$n]); L := NULL; for i from 2 to n/2 do #@# si $2i>n$ la boucle en $j$ est vide if T[i] then L := L,i; for j from 2*i to n by i do T[j] := false; od fi; od; [L]; end; #@# un peu plus efficace (construit la liste à la fin): plist3 := proc(n) local i,j, L, T; T := array([true$n]); for i from 2 to n/2 do if T[i] then for j from 2*i to n by i do T[j] := false; od fi; od; #@# ne marche apparemment pas dans la version Etudiant, mais est correct select(i->T[i], [ seq(i, i=1..n) ]); end;