(* Question 2 *)let val p n = if p<2 or n<2 then failwith "argument(s) incorrect(s)" else let rec aux r = function | v when v mod p = 0 -> aux (r+1) (v/p) | _ -> r in aux 0 n ;; (* Question 3 *)let ppdiv d n = if n<=0 or d<=0 or d>n then failwith "arguments incorrects" ; let rec aux k = function | n when n mod k = 0 -> k | n -> aux (k+1) n in aux d n ;;(* Question 4 *)let rec puiss n = function | 0 -> 1 | e -> n * (puiss n (e-1)) ;;(* Question 5 *)let factorise n = let rec aux p dec = function | 1 -> dec | v -> let p' = ppdiv p v in let q = val p' v in let v' = (v/(puiss p' q)) in aux (p'+1) ((p',q)::dec) v' in aux 2 [] n ;;(* Question 6 *)let est_premier n = match factorise n with | [(_,1)] -> true | _ -> false ;; (* Question 6 *)let rec next_prime n = match est_premier n with | true -> n | false -> next_prime (n+1) ;; (* Question 7 *)let premiers_depuis n q = let rec aux n' r = function | 0 -> r | k -> let n' = next_prime n' in aux (n'+1) (n'::r) (k-1) in aux n [] q ;; let rec premiers_depuis n = function | 0 -> [] | k when est_premier n -> n::(premiers_depuis (n+1) (k-1)) | k -> premiers_depuis (n+1) k ;;