Adloun

OCaml (option informatique) · Chapitre 4 · Exercice de TD

Test de primalité

Programmation impérative : références et boucles · niveau 3 (difficile)

É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 ... && !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.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre