Nombres premiers

Résolu
Kixool -  
 Kixool -
Bonjour,
J'ai un tp à préparer pour mardi et je voulais savoir ce qui clochait dans mon programme... Il s'agit de faire un programme qui dit si la valeur entrée par l'utilisateur est correcte ou pas.
J'ai essayé ceci mais il doit y avoir un problème :
#include <stdio.h>
#include <math.h>

int main()
{
    int vu; // Valeur entrée par l'utilisateur
    int vd=0; // variables des diviseurs
    int vi=0; // valeur intermédiaire de test

    printf (" Entrez un nombre dont vous souhaitez savoir si il est un nombre premier :");
    scanf ("%d",&vu);

    for (vd>=2 ; vd<=vu ; vd++)
    {
        vi=vu%vd;
    }
    if (vi==0 && vd==vu)printf("ce nombre est un nombre premier");
    if (vi==0 && vd!=vu)printf("Ce nmbre n'est pas premier");
return 0;
}


Si vous pouviez m'aider ... merci d'avance!
Configuration: Windows XP
Firefox 3.0

3 réponses

  1. Kixool
     
    Ok merci je testerai ça après manger...J'espère que ca fonctionnera.
    0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Salut,
    Essaye ceci, ça devrait marcher.
    Sinon quelque remarque sur ton code. Tu ne te sers pas de la bibliothèque math donc pas besoin de l'inclure.
    Tu peux incrémenter vu de 2 en 2 dans ta boucle for en partant de vd=3 en prenant le soin de vérifier que vu n'est pas pair. En effet pas besoin de diviser vu par un nombre pair s'il n'est pas divisible par 2.
    N'oublie pas de tester si le nombre est supérieur à 2 avant de rentrer dans ta boucle for. Sinon il va y avoir des surprises.
    Et un dernier point : pas besoin d'aller de 2 à vu dans la boucle for. De 2 à sqrt(vu) (racine) suffira.

    Voilà, de quoi améliorer ton code.
    #include <stdio.h>
    #include <math.h>
    
    int main()
    {
        int vu; // Valeur entrée par l'utilisateur
        int vd=0; // variables des diviseurs
        int vi=0; // valeur intermédiaire de test
    
        printf (" Entrez un nombre dont vous souhaitez savoir si il est un nombre premier :");
        scanf ("%d",&vu);
        for (vd=2 ; vd<=vu ; vd++)
        {
            if (vu%vd==0 && vd!=vu){
                printf("ce nombre n'est un nombre premier\n");
                return 0;
            }
        }
        printf("Ce nombre est premier\n");
        return 0;
    }
    

    Cdlt
    -1