Nombres premiers

Résolu
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. Ok merci je testerai ça après manger...J'espère que ca fonctionnera.
    0
    1. Ca a marché. Merci beaucoup!
      0
      1. Contributeur
        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