salut je suis debutant et je face une difficute. en effet j'essaye d'ecrire un programme en c qui demande a l'utilisateur d'entrer un nombre et par la suite affiche les diviseurs de ce nombre en question. merci d'avance
Bonjour, Merci d'écrire un titre en rapport avec votre problématique, et transmettez le code que vous avez écrit en utilisant le bouton code </> du forum affin de recevoir avis et aide par rapport à celui-ci.
Mauvais titre
Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.
Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).
De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.
Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.
Pour modifier votre titre, éditez le premier message de votre sujet.
Bon je n'ai pas l'expérience nécessaire pour dire ça mais.. Il y a un début à tout comme on dit.
Ça serait mieux si tu utilisais "Code <>" pour que ce soit plus compréhensible mais on va faire avec.
Déjà "int div" n'est pas correct, ce n'est pas une variable tu n'as donc pas à le déclarer. Ensuite, au lieu d'utiliser une boucle "while" je te conseille plutôt d'utiliser une boucle "for". Concernant tes variables, il est préférable qu'elles soient réel et non entier, donc "double" et non "int.", du coup dans ton printf tu auras plutôt "%lf".
Ensuite, tu mets comme instruction "si div = 0, écrire y" ce qui ne sert à rien.. Sachant que comme je l'ai dit div ne peut pas être utilisé comme variable.
Très peu d'esthétisme dans ton code ce qui le rend peu lisible, je te conseille vraiment d'améliorer ça si tu veux que ça devienne lisible.
Si tu ne comprends toujours pas, je peux te le faire en algo et tu auras juste à le traduire en C.
(Les expérimentés qui lisent ça.. si j'ai dit des bêtises ne me tapez pas).
@UlrichFossi Bonjour, Merci de modifier le titre de votre sujet comme demandé. ET
Merci de colorer votre code à l'aide du bouton Code
Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.
Étant donné qu'il est peu intéressant de donner 1 et le nombre lui-même comme diviseurs, il vaut mieux chercher entre 2 et nombre/2 inclusivement. En effet, si on suppose un diviseur supérieur à nombre/2 et inférieur à nombre, j'aurai: nombre/2 < diviseur < nombre nombre < diviseur*2 Il n'y a pas d'entier entre 1 et 2, ce qui nous amène à une contradiction. On pourrait écrire: for(int diviseur = 2; diviseur <= nombre/2; diviseur++) if(nombre % diviseur == 0) printf("%d\n", diviseur);
Le Tout est souvent plus grand que la somme de ses parties.
Il semble que l'auteur du post original ne soit plus intéressé par la solution. J'ajoute ce qui suit: Supposons que le nombre pour lequel on cherche les diviseurs soit de l'ordre du milliard. Il faudrait environ 500 millions d'itérations pour trouver les diviseurs de ce nombre. Il serait beaucoup plus rapide de trouver ses facteurs premiers et leur fréquence respective. Intuitivement, on peut penser que plus les facteurs sont grands, moins il y en a pour un nombre d'un ordre donné. Considérons 2^30 qui est de cet ordre de grandeur. Tout nombre ayant un facteur plus grand que 2 verra le nombre de facteurs diminuer (toujours pour cet ordre de grandeur). Il faudra environ 30 itérations pour trouver tous les facteurs premiers et leurs fréquences. Le nombre de diviseurs sera le produit des fréquences des facteurs plus un pour chaque fréquence. Par exemple, si N = 2^28 * 3^1, il y aura (28+1) * (1+1) diviseurs (58). (on considère le cas où le facteur apparaît 0 fois). C'est un compteur circulaire avec un nombre différent de coches pour chaque niveau (facteur).
Le Tout est souvent plus grand que la somme de ses parties.
Il semble que l'auteur du post original ne soit plus intéressé par la solution. J'ajoute ce qui suit: Supposons que le nombre pour lequel on cherche les diviseurs soit de l'ordre du milliard. Il faudrait environ 500 millions d'itérations pour trouver les diviseurs de ce nombre.
Si tu cherches naïvement les diviseurs de N>3 alors tu peux te limiter à l'intervalle [1;sqrt(N)] car à chaque diviseur d que tu trouves dans cet intervalle va correspondre un unique diviseur N/d dans [sqrt(N),N]. Tu aboutis à un algorithme en O(n^.5) ce qui sera toujours meilleur que n'importe quel algorithme de factorisation entière. Un algorithme hybride pourrait prendre avantage à trouver les petits facteurs premiers de N. Le pire des cas restant la recherche de diviseurs d'un nombre premier. Si on reprend ton ordre de grandeur en prenant pour exemple le nombre 1000773161, il faudra 31634 = sqrt(1000773161) itérations pour en trouver les 4 diviseurs.
Tu as raison. Je ne peux pas trouver d'autres diviseurs que k et N/k pour k de 2 à sqrt(N) Pour 1000773161, je trouve 31627, 31643 et la recherche de ces deux facteurs premiers est aussi longue que de trouver naïvement les diviseurs. Avec de la chance, je pourrais sauter le second PS Je l'ai fait en Python, pas en C ...
Le Tout est souvent plus grand que la somme de ses parties.
difficulte
× 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.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.