OCaml. Exercices sur les entiers

Exercice 1.
Écrire une fonction “diviseur : int -> int -> bool” testant si un premier entier en divise un second.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 2.
Écrire une fonction “ndays : int -> int” donnant le nombre de jours d’un mois de l’année (année non bissextile), en fonction de la position du moins dans l’année.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 3.
Écrire une fonction “ndigits : int -> int” donnant le nombre de chiffres d’un entier.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 4.
Écrire une fonction “fact : int -> int” calculant la factorielle d’un entier.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 5.
Écrire une fonction “cnp : int -> int -> int” donnant le coefficient binomial {\dbinom{n}{p}}.
On s’attachera à donner plusieurs versions différentes.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 6.
La suite de Fibonacci est définie par {F_{0}=0}, {F_{1}=1} et {F_{n}=F_{n-1}+F_{n-2}} pour {n\ge2}.
Écrire une fonction “fibo : int -> int” calculant le {n}-ième terme de la suite de Fibonacci.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 7.
Écrire simultanément deux fonctions récursives “pair : int -> bool” et “impair : int -> bool” s’appelant mutuellement, et qui disent si un entier donné est pair (impair) ou non.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 8.
La suite dite de Syracuse” est définie par {u_{0}=a\in \mathbb{N}^{*}} et {u_{n+1}=\begin{cases}u_{n}/2\text{\ si\ }u_n\text{\ est pair}\cr 3u_{n}+1\text{\ si\ }u_n\text{\ est impair}\end{cases}}
Une célèbre conjecture, non démontrée à ce jour, affirme que : {\forall\, a\in\mathbb{N}^{*},\;\exists\,n_{0}\in\mathbb{N},\;u_{n_{0}}=1}.
Écrire une fonction “syrac : int -> unit” affichant la suite des valeurs de {u_{0}=a} à {u_{n_{0}}=1}, séparées par des espaces, avec un saut de ligne final.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 9.
On multiplie deux entiers {a} et {b} de la manière suivante, dite “du paysan russe” : on divise {a} par {2} tant que c’est possible, en doublant {b}, sinon on décrémente {a} et on ajoute {b} au résultat.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 10.
Écrire une fonction “prime : int -> bool” testant si un entier strictement positif est premier.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 11.
Écrire une fonction “factor : int -> unit” affichant les facteurs premiers d’un entier {n} (chacun d’entre eux étant éventuellement répété autant que nécessaire).
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez : 

Exercice 12.
Écrire une fonction “randseg : int -> int -> int” renvoyant un entier aléatoire dans un segment {[a,b]}.
Cliquer ici pour voir (ou cacher) le corrigé
  Pour voir ce contenu, vous devez :