Adloun

Le crible d'Ératosthène

Exercice · OCaml (option informatique), chapitre 5 — Les tableaux

Énoncé

Écrire crible n renvoyant un tableau de booléens où la case i indique si i est premier (pour 0 <= i <= n).

Corrigé

let crible n =
  let est_premier = Array.make (n + 1) true in
  est_premier.(0) <- false;
  if n >= 1 then est_premier.(1) <- false;
  for d = 2 to n do
    if est_premier.(d) then begin
      let m = ref (d * d) in
      while !m <= n do
        est_premier.(!m) <- false;
        m := !m + d
      done
    end
  done;
  est_premier

On part de « tout est premier », on élimine 0 et 1, puis pour chaque d encore marqué premier, on barre tous ses multiples à partir de d<em>d (les plus petits ont déjà été barrés par des facteurs plus petits). Le tableau de booléens est l'outil idéal : accès et mise à jour en temps constant. (Variant de la boucle while : n - !m, qui décroît de d à chaque tour.)*

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.