Adloun

Test de primalité

Exercice · OCaml (option informatique), chapitre 4 — Programmation impérative : références et boucles

Énoncé

Écrire est_premier n avec une boucle while qui s'arrête dès qu'un diviseur est trouvé.

Corrigé

let est_premier n =
  if n < 2 then false
  else begin
    let d = ref 2 and premier = ref true in
    while !d * !d <= n && !premier do
      if n mod !d = 0 then premier := false;
      d := !d + 1
    done;
    !premier
  end

On cherche un diviseur d de 2 à . La référence booléenne premier sert de drapeau : la condition ... &amp;&amp; !premier (évaluation paresseuse) arrête la boucle dès qu'un diviseur est trouvé. Le begin … end groupe la séquence de la branche else en une seule expression.

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.