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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

Exercice 4.
Écrire une fonction « fact : int -> int » calculant la factorielle d’un entier.
Cliquer ici pour voir (ou cacher) le corrigé
Pour voir la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

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 la suite de ce contenu, vous devez : Pour poursuivre votre exploration, vous pouvez :

Author: Jean-Michel Ferrard

Professeur de mathématiques en classe préparatoire aux grandes écoles.