32 lines
912 B
OCaml
32 lines
912 B
OCaml
(**
|
|
pgcd : int -> int -> int
|
|
description : renvoie le pgcd de deux entiers non nuls
|
|
a : entier dont on cherche le pgcd avec b
|
|
b : entier dont on cherche le pgcd avec a
|
|
returns : pgcd(a, b)
|
|
précondition : a > 0 et b > 0
|
|
*)
|
|
let rec pgcd a b =
|
|
if a = 0 || b = 0 then failwith "entrer deux entiers non nuls";
|
|
let abs x = if x < 0 then -x else x in
|
|
let a = abs a in
|
|
let b = abs b in
|
|
if a = b then
|
|
a
|
|
else if a > b then
|
|
pgcd (a - b) b
|
|
else
|
|
pgcd a (b - a)
|
|
|
|
(* tests unitaires *)
|
|
let%test _ = pgcd 1 1 = 1
|
|
let%test _ = pgcd 10 25 = 5;;
|
|
let%test _ = pgcd (-10) 25 = 5;;
|
|
let%test _ = pgcd 10 (-25) = 5;;
|
|
let%test _ = pgcd (-10) (-25) = 5;;
|
|
(*
|
|
let%test _ = pgcd 0 25 = failwith "entrer deux entiers non nuls";;
|
|
let%test _ = pgcd 10 0 = failwith "entrer deux entiers non nuls";;
|
|
let%test _ = pgcd 0 = failwith "entrer deux entiers non nuls";;
|
|
*)
|