Fonction ocaml
Résolu
ocaml555
-
nicocorico Messages postés 846 Statut Membre -
nicocorico Messages postés 846 Statut Membre -
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]
8 réponses
-
http://www.pps.jussieu.fr/Livres/ora/DA-OCAML/
-
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
-
désolé mais j'ai seulement 12 ans donc je n'utilise pas de language informatique
-
-
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] -
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;;