IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

[débutant] test de primalité


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de grand_prophete
    Inscrit en
    Avril 2005
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 85
    Par défaut [débutant] test de primalité
    Bonjour

    Je suis en train de faire un programme pour tester la primalité d'un nombre. Pour cela une boucle permet de diviser un nombre choisi par tous les nombres allant de 2 à celui choisi. Si le reste de la division à un moment vaut 0 il n'est pas premier. Mon problème est d'arreter le programme à la première détection d'un reste égal à 0, parce que la il m'affiche la phrase ("Ceci n'est pas un nombre premier\n"); autant de fois qu'il trouve un reste egal à 0. et Lorsque le nombre est premier il refuse de m'afficher quoi que ce soit. Un ptit coup de main ce serait sympa. Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
      int premier,reste,i;
      printf("Rentrez un nombre : ");
      scanf("%d", &premier);
     
    	for (i=2;i<premier;i++)
            {
            reste = premier % i;
     
          switch(reste)
            {
            case 0: printf("Ceci n'est pas un nombre premier\n");break;
            defaut: printf("Ceci est un nombre premier\n");
            }
     
            }//for
     
      system("PAUSE");	
      return 0;
    }

  2. #2
    Membre éclairé Avatar de Tex-Twil
    Inscrit en
    Avril 2004
    Messages
    447
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 447
    Par défaut
    Quand tu ne sais pas à lavance combien de boucles tu vas faire, il faut mieux utiliser un while

  3. #3
    Membre émérite
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Par défaut
    N'utilise pas un for !!! Inclue dans un WHILE une condition d'arrêt avec estPremier = 1 par exemple (un booléen donc).

    En général, dans un programme, si tu as besoin d'utiliser un break ou un continue qq part, c'est ke ton algo est pas top!

    Ciao
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  4. #4
    Membre éclairé Avatar de Tex-Twil
    Inscrit en
    Avril 2004
    Messages
    447
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 447
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
      int premier,reste,i;
      printf("Rentrez un nombre : ");
      scanf("%d", &premier);
    	reste = -1;
    	i = 2;
    	while( i < premier && reste != 0)
            {
    	        reste = premier % i;
    		i++;        
            }
    	if(reste == 0)
    		printf("Ceci n'est pas un nombre premier. Diviseur: %i\n", i-1);
    	else
            	printf("Ceci est un nombre premier\n");
     
      return 0;
    }
    voilà

    je te lance un défi: trouve moi le plus grand nombre 1er qui existe

  5. #5
    Membre confirmé Avatar de grand_prophete
    Inscrit en
    Avril 2005
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 85
    Par défaut
    Merci c'est sympa

  6. #6
    Membre confirmé Avatar de grand_prophete
    Inscrit en
    Avril 2005
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 85
    Par défaut
    Au fait, pourquoi reste = -1; et dans le printf i-1 ? Je pige pas trop

  7. #7
    Membre éclairé Avatar de Tex-Twil
    Inscrit en
    Avril 2004
    Messages
    447
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 447
    Par défaut
    Citation Envoyé par grand_prophete
    Au fait, pourquoi reste = -1; et dans le printf i-1 ? Je pige pas trop
    alors le reste = -1 c'est pour initialiser la valeurs de reste. Si tu l'initialise pas il contient une valeur aléatoire que tu ne connais pas. Si jamais elle est égale à 0 tu ne rentreras pas dans la boucle et t'auras un résultat faux.

    Pour le printf i-1, déroule l'algo. Dans ta boucle while, une fois que t'as trouvé un reste nul, tu incrémentes une fois de plus i avant de sortir. Il faut donc afficher i-1 pour afficher le diviseur.

  8. #8
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par grand_prophete
    Pour cela une boucle permet de diviser un nombre choisi par tous les nombres allant de 2 à celui choisi. Si le reste de la division à un moment vaut 0 il n'est pas premier.
    Pas besoin d'aller si loin, pour savoir si n est premier, il suffit de tester les nombre de 2 a sqrt(n).

  9. #9
    Membre émérite
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Par défaut
    je dirais meme plus, il suffit de tester tous les nombres impairs jusqu'a racine de n.

  10. #10
    Membre confirmé Avatar de grand_prophete
    Inscrit en
    Avril 2005
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 85
    Par défaut
    Oui bon de toute manière c'est comme pour tout, y'a plusieurs solutions, là j'en ai une pas trop longue et compliquée. Va falloir que je teste maintenant si un nombre est parfait et ensuite si deux nombres sont amis.... j'ai pas fini

  11. #11
    Membre émérite
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Par défaut
    certes, mais on ne te proposait as d'implementer un algo de dingue, a priori c'est 2 lignes a changer dans ton code qui font baisser d'un dre de grandeur ton algo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant]Test d'ouverture d'un fichier.
    Par Lucky-94 dans le forum C
    Réponses: 10
    Dernier message: 23/08/2006, 17h21
  2. [Mail] [Débutant] Test conditionnel
    Par pugnator dans le forum Langage
    Réponses: 10
    Dernier message: 18/07/2006, 10h46
  3. tests de primalité
    Par 123quatre dans le forum C
    Réponses: 2
    Dernier message: 20/12/2005, 09h55
  4. [débutant] test sur un évènement
    Par heider dans le forum Langage
    Réponses: 4
    Dernier message: 07/10/2005, 00h44
  5. [Algo] Test de primalité
    Par Khorne dans le forum Mathématiques
    Réponses: 10
    Dernier message: 04/04/2004, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo