Fonction ocaml

Résolu
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

  1. 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;;
    1. Modérateur
      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...
    2. 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
  2. Modérateur
    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;;
    1. merci mais vue que je ne coné rien au c je ne sais pas vrement comment faire peut tu m'aidez et merc
      1. Modérateur
        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]
        1. désolé mais j'ai seulement 12 ans donc je n'utilise pas de language informatique
          1. 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
        2. 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