(* Exercice 1 *) let dichotomie x t = ();; (* Exercice 2 *) let rec f x n = match n with | 0 -> 1 | _ -> x * (f x (n - 1));; f 10 2;; let puissance x n = let res = ref 1 in for i=0 to n-1 do res := !res * x done; !res;; puissance 2 2;; (* Exercice 3 *) (* 5 *) let rec pgcd a b = match min (abs a) (abs b) with | 0 -> max (abs a) (abs b) | 1 -> 1 | _ -> pgcd ((max (abs a) (abs b)) mod (min (abs a) (abs b))) (min (abs a) (abs b));; let rec pgcd a b = match b with | 0 -> a | -> pgcd b (a mod b);; (* 7 *) let bezout a b = let rec aux u0 v0 u1 v1 r0 r1 = match r0 mod r1 with | 0 -> r1,u1,v1 | _ -> aux u1 v1 (u0 - ( (r0 / r1) * u1 ) ) (v0 - ( (r0 / r1) * v1 )) r1 (r0 mod r1) in aux 1 0 0 1 a b;; bezout 24 65;; bezout 6 6;; pgcd (-1024) 4096;; max (abs 1) (abs 2) ;; abs;; (* Exercice 4 *) let next n = match n mod 2 with | 0 -> n/2 | _ -> 3 * n + 1;; let next 1;; let rec syracuse n = match n with | 1 -> [1] | _ -> n::syracuse (next n);; syracuse 5;; let rec altitude_maximale n = match n with | 1 -> 1 | _ -> max n (altitude_maximale (next n));; syracuse 9;; altitude_maximale 9;; let dav n = let vmax = ref 0 in let v = ref 0 in let i = ref n in while !i <> 1 do i := next !i; if !i > n then v := !v + 1 else v := 0; if !v > !vmax then vmax := !v done; !vmax;; dav 9;;