Ocaml

Résolu/Fermé
imo - 31 oct. 2008 à 00:14
 imo - 31 oct. 2008 à 15:57
Bonsoir,
vous pouvez m'aider j'ai besoin dans programme ocaml qui teste si le nombre est premier ou non.
merci

3 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 018
31 oct. 2008 à 10:56
En Caml Light :
let sqrt_impair n=
	let i=int_of_float (sqrt (float_of_int n)) in
	if (i mod 2)=0 then (i+1) else i;;

let rec Est_Divise a r n =
	if a>r 	then false
		else if (n mod a)=0 then true
		else Est_Divise (a+2) r n;;


let Est_Premier n =
	if n=2 	then true
		else if (n mod 2)=0 then false
		else not (Est_Divise 3 (sqrt_impair n) n);;
1
merci bcp
0
mamiemando Messages postés 33284 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 septembre 2024 7 787
31 oct. 2008 à 00:47
Sur ce forum a priori on ne fera pas l'exercice à ta place afin que tu progresses
Plusieurs algorithmes sont donnés ici si tu as besoin d'inspiration.
https://fr.wikipedia.org/wiki/Nombre_premier#Algorithme__par_essais_de_divisions

En caml je te rappelle, on programme plutôt en récursif après avoir identifié les cas d'arrêts (ici le nombre 1 ou quand on a trouvé un diviseur). L'idée consiste à essayer de diviser N par chaque entier compris entre k = racine(N) et k = 1, et à interrompre la récursion si on en trouve un (N % k est nul, le résultat est "le nombre n'est pas premier"), soit si k est égal à 1 (N n'est divisible que par lui ou par 1), soit la valeur que la fonction récursive trouve avec k - 1.

Il ne reste plus qu'à transposer tout ça en caml.

Bonne chance
0
mamiemando Messages postés 33284 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 septembre 2024 7 787
31 oct. 2008 à 14:08
Tu as raison, fais-lui son job à sa place, comme ça il n'apprendra rien et il pourra glander chez lui.
0
merci c gentil de ta part
0