Fonction ocaml
Résolu
ocaml555
-
nicocorico Messages postés 799 Date d'inscription Statut Membre Dernière intervention -
nicocorico Messages postés 799 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
comment ecrire une fonction en ocaml qui renvoi la liste des diviseur d'un entier
ex: si n =6 alors le resultat sera [1;2;3;6]
comment ecrire une fonction en ocaml qui renvoi la liste des diviseur d'un entier
ex: si n =6 alors le resultat sera [1;2;3;6]
A voir également:
- Fonction ocaml
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
8 réponses
merci mais je ne sait pas trop ou trouver la reponse donc ci t'a une idee sur la solution elle est la bienvenu merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Dans un premier temps tu peux regarder cette discussion : langage C nombre parfait, ce n'est pas tout à fait ton sujet mais j'y expliquait comment trouver efficacement les diviseurs d'un entiers, pour l'adapter à ton problème il te faudra rajouter le diviseur à ta liste à chaque fois que moi je le rajoutait à la somme.
Remarque pour ajouter un nombre à une liste tu peux faire
1) let liste = element::liste
2) let liste = liste::[element]
Remarque pour ajouter un nombre à une liste tu peux faire
1) let liste = element::liste
2) let liste = liste::[element]
merci mais vue que je ne coné rien au c je ne sais pas vrement comment faire peut tu m'aidez et merc
Si tu arrives au moins à lire mes explications en français, tu comprendras ce que j'ai fait :
let diviseurs n = let liste=ref [1;n] and r=ref (int_of_float(sqrt(float_of_int n))) in if !r * !r=n then begin liste := !r :: !liste; decr(r); end; for i=2 to !r do if (n mod i==0) then liste:= !liste@[i;n/i]; done; !liste;;
eureka g fini par trouvé sufisait juste d'utilisé une rec local
merci pour ta solution KX mais je la trouve asser longue
voila la mienne
let g x=let rec g1 b = if b=1 then[1] else if (x mod b)=0 then b::(g1 (b-1)) else g1 (b-1) in g1 x;;
merci pour ta solution KX mais je la trouve asser longue
voila la mienne
let g x=let rec g1 b = if b=1 then[1] else if (x mod b)=0 then b::(g1 (b-1)) else g1 (b-1) in g1 x;;