Partage
  • Partager sur Facebook
  • Partager sur Twitter

Calcul de la somme des diviseurs

Le but est de trouver la somme des diviseurs d'un nombre

    16 mars 2022 à 16:36:04

    int SommeDiviseurs(int nombre){
    int r = 0;
    for(int i=1; i<=nombre; i++){
      if(nombre%i == 0) r+=i;
    }
    return r;
    J'ai fait des tests et le programme n'est efficace qu'un fois sur deux :(
    Quelqu'un pourrait me dire ce qui ne va pas ici? Je n'arrive pas à avancer sur ce problème...
    Pour ceux qui ne verrait pas, par ex: SommeDiviseurs(28) = 1+2+4+7+14+28 = 56.
    • Partager sur Facebook
    • Partager sur Twitter
      16 mars 2022 à 17:04:37

      Que veux-tu dire par "efficace"? Pas assez rapide ou ne marche pas?
      Tu pourrais essayer avec 720720, il y a 240 diviseurs.
      Rappelles-toi que si d est un diviseur de n, alors n/d l'est également.
      Il est donc inutile d'aller au dela de la racine carrée.

      Pour 720720 tu n'aurais que 848 nombres à tester.

      r += i + nombre/i;

      Attention, si nombre = i*i (carré parfait) il ne faut pas l'ajouter deux fois.

      -
      Edité par PierrotLeFou 16 mars 2022 à 17:47:57

      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

      Calcul de la somme des diviseurs

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown