Fonction ocaml

Résolu/Fermé
ocaml555 - 29 juin 2011 à 19:25
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 - 29 juin 2011 à 21:17
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]


8 réponses

doodoo_ch Messages postés 13 Date d'inscription lundi 27 juin 2011 Statut Membre Dernière intervention 18 octobre 2011
29 juin 2011 à 19:36
http://www.pps.jussieu.fr/Livres/ora/DA-OCAML/
0
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
0
doodoo_ch Messages postés 13 Date d'inscription lundi 27 juin 2011 Statut Membre Dernière intervention 18 octobre 2011
29 juin 2011 à 19:48
désolé mais j'ai seulement 12 ans donc je n'utilise pas de language informatique
0
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
29 juin 2011 à 21:17
La programmation est sans doute une sorte de drogue, mais de celles que tu peux commencer à 12 ans sans danger !

Le chêne aussi était un gland, avant d'être un chêne
0
lol merci conmeme
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
29 juin 2011 à 20:02
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]
0
merci mais vue que je ne coné rien au c je ne sais pas vrement comment faire peut tu m'aidez et merc
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
29 juin 2011 à 20:46
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;;
0
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;;
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
29 juin 2011 à 21:05
Si tu lis le lien que je t'ai donné, tu verras pourquoi ma fonction est plus longue, c'est pour améliorer le temps de calcul...

Regarde à partir de 100 000 000, tu n'as peut-être pas besoin de calculer de grandes valeurs, mais savoir optimiser est toujours utile...
0
ashboy Messages postés 52 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 29 juin 2011
29 juin 2011 à 21:09
oui mais bon a mon niveau c'est tous se que je peut faire je ne comprend pas la moitie des fonction que tu a utilisé donc en tant que débutant c tous se dont je suis capable
0