Trouver les nombres premiers d'un intervalle
Fermé
Perplex.
Messages postés
20
Date d'inscription
mercredi 3 septembre 2014
Statut
Membre
Dernière intervention
16 octobre 2014
-
Modifié par Perplex. le 15/10/2014 à 20:31
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 16 oct. 2014 à 21:08
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 16 oct. 2014 à 21:08
A voir également:
- Trouver les nombres premiers d'un intervalle
- Trouver adresse mac - Guide
- Trouver un lieu avec coordonnées gps - Guide
- Trouver un film sans le titre - Télécharger - Divers TV & Vidéo
- Comment trouver le mot de passe wifi sur son téléphone - Guide
- Trouver un nom avec une adresse ✓ - Forum Réseaux sociaux
3 réponses
Utilisateur anonyme
15 oct. 2014 à 21:52
15 oct. 2014 à 21:52
bonjour
Attention ,
Tu commences avec m=1, mais le reste de la division par 1 est toujours 0. Donc ton
Enfin, quelle drôle d'idée de mettre du "short" partout, mais ça, ce n'est pas un problème.
Le père (pas plex)
for(i>=a;i<=b;i++)
Attention ,
i>=an'initialise pas i. C'est juste un test, dont le résultat n'est pas utilisé. Je suppose que tu voulais écrire :
for (i=a;....
for(m=1;m<=i;m++) { if(i%m==0)
Tu commences avec m=1, mais le reste de la division par 1 est toujours 0. Donc ton
if(i%m==0)sera toujours vrai pour m=1. Autant commencer ta boucle à 2 après avoir initialisé z à 1.
if(z==2)À l'endroit où tu as mis ce test, tu as afficher i dès que tu auras trouvé le second diviseur, même s'il y en a une demi-douzaine d'autres. Il faut attendre d'avoir testé tous les diviseurs potentiels avant de tirer une conclusion.
Enfin, quelle drôle d'idée de mettre du "short" partout, mais ça, ce n'est pas un problème.
Le père (pas plex)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
15 oct. 2014 à 21:52
15 oct. 2014 à 21:52
Bonjour,
Original comme façon de faire :-). Généralement, on se fait une fonction estPremier() et on l'applique sur tous les nombres de l'intervalle.
Mais pourquoi pas. Par contre le nom des fonctions ne correspond pas très bien à son contenu. Pourquoi mettre des shorts partout au lieu de int ?
Sinon, le problème vient de la fonction modulo().
En l'état, tu n'affiches pas que les nombres premiers mais tous les nombres. Et certains plusieurs fois.
Par exemple, imagine que tu testes le nombre 10.
10%1 => 0 => z=1
10%2 => 0 => z=2 donc on affiche 10...
10%3 => 1 => z=2 donc on affiche 10...
etc.
Le if(z==2) ne doit pas être dans la boucle for.
Cdlt,
Original comme façon de faire :-). Généralement, on se fait une fonction estPremier() et on l'applique sur tous les nombres de l'intervalle.
Mais pourquoi pas. Par contre le nom des fonctions ne correspond pas très bien à son contenu. Pourquoi mettre des shorts partout au lieu de int ?
Sinon, le problème vient de la fonction modulo().
En l'état, tu n'affiches pas que les nombres premiers mais tous les nombres. Et certains plusieurs fois.
Par exemple, imagine que tu testes le nombre 10.
10%1 => 0 => z=1
10%2 => 0 => z=2 donc on affiche 10...
10%3 => 1 => z=2 donc on affiche 10...
etc.
Le if(z==2) ne doit pas être dans la boucle for.
Cdlt,
Perplex.
Messages postés
20
Date d'inscription
mercredi 3 septembre 2014
Statut
Membre
Dernière intervention
16 octobre 2014
16 oct. 2014 à 13:24
16 oct. 2014 à 13:24
Bonjour, bon mon problème est résolu grâce à vos deux réponses bien complètes!
Donc c'est un exo où je dois utiliser des fonctions avec entrées et mais sans sorties du coup après m'être creusé la tête pour savoir comment faire un modulo "automatique", c'est à dire sans rentrer un N soit même et afficher si il est premier ou pas mais dans un intervalle, je me suis dit que je vais envoyer mon i dans une autre fonction le tester premier ou pas.
Donc sinon je suis preneur pour ta méthode afin d'avoir plusieurs idées
Pour les noms des fonctions je t'avoue que j'étais plutôt centré sur la méthode pas trop la mise en forme.
Enfin pour l'histoire des shorts je veux bien que vous m'éclairiez du coup ...
Merci encore!
Donc c'est un exo où je dois utiliser des fonctions avec entrées et mais sans sorties du coup après m'être creusé la tête pour savoir comment faire un modulo "automatique", c'est à dire sans rentrer un N soit même et afficher si il est premier ou pas mais dans un intervalle, je me suis dit que je vais envoyer mon i dans une autre fonction le tester premier ou pas.
Donc sinon je suis preneur pour ta méthode afin d'avoir plusieurs idées
Pour les noms des fonctions je t'avoue que j'étais plutôt centré sur la méthode pas trop la mise en forme.
Enfin pour l'histoire des shorts je veux bien que vous m'éclairiez du coup ...
Merci encore!
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
16 oct. 2014 à 21:08
16 oct. 2014 à 21:08
Oui, j'magine pour la mise en forme. Mais, cela permet d'y voir plus clair et finalement, ça te fait gagner du temps. Beaucoup de personnes n'indentent pas et quand on leur demande de le faire, elles voient certaines fautes :-).
Sinon pour l'idée, classiquement on fait plutôt :
Pour char, le père semble avoir tout dit :-).
Sinon pour l'idée, classiquement on fait plutôt :
#include ... int estPremier(const int nb) { /*ici tu mets ton code pour savoir si le nombre est premier*/ /*s'il n'est pas premier, alors on renvoie 0*/ return 0; } int main(void) { int min, max; scanf("%d", ...); scanf(...); if (b>a) { int i; for(i=...; i<...; i++) { if (estPremier(...)) { printf("%d, ", ...); } } } return 0; }
Pour char, le père semble avoir tout dit :-).
sambia39
Messages postés
610
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
9 février 2023
49
16 oct. 2014 à 18:19
16 oct. 2014 à 18:19
Bonjour
Je me pose une petite question, c'est bien beau de trouver les nombres premiers dans une intervalles mais quand est-il si dans cet intervalle se trouve un nombre composer ?
Vu le code je doute "fort" :) qu'on obtienne des résultats valide
à bientôt
Je me pose une petite question, c'est bien beau de trouver les nombres premiers dans une intervalles mais quand est-il si dans cet intervalle se trouve un nombre composer ?
Vu le code je doute "fort" :) qu'on obtienne des résultats valide
à bientôt
Modifié par Perplex. le 16/10/2014 à 13:18
Après j'ai modifié pour le m=2 et z=1 enfin bon c'est pareil mais c'est vrai que c'est plus logique.
Et pour finir l'histoire du short j'ai pas compris ? Je met short int car c'est un entier court, je sais pas tu aurais mis quoi ?
Merci encore!
16 oct. 2014 à 13:38
Modifié par Perplex. le 16/10/2014 à 13:42
Par contre pourrais-tu juste m'expliquer les chars etc.. car je ne vois pas la différence entre ces formats.
16 oct. 2014 à 13:47
À titre d'exemple, si c'est pour printf :
http://www.cplusplus.com/reference/cstdio/printf/
C'est du C++, mais ça doit s'appliquer au C aussi
16 oct. 2014 à 13:54