Forum Clubic

Les nombres premiers - Probléme resolu

Salut, j’ai un petit souci

voila un bout de mon code :



     // la partie facile ..
    si n<2 alors
       retourner faux
     fin si
    
    si n == 2  
       retourner vrai
    fin si
    
    si (n modulo 2) == 0
       retourner faux
    fin si
   
    // la partie compliqué
    pour i de 2 jusqu'a I(n/2)I (partie entiere de n/2)   
                              // j'hesite avec racine carre de n sqrt(n)  
     si (n != i) et (n modulo i) ==0
         retourner faux
     fin si
    
   fin pour
    
    retourner vrai 


votre opinion ? ça m’a l’air correct mais un second avis est toujours mieux …
est ce que ca reste valable avec sqrt(n) ??

:jap:

Déjà ce serait bien de savoir ce que tu veux faire exactement…

En tout cas, une boucle tant que me semble plus adaptée au problème ! :wink:

savoir si ce que j’ai pondu est :
1° : correct
2° : fonctionne en remplaçant n/2 par racine carré de n

edit : pourquoi un tant que ? il est pas bien mon pour ?

J’imagine donc que le but est de voir si n est premier ?
Une boucle tant que te permet d’arrêter de chercher dès que tu as trouvé un diviseur pour n (pas la peine d’aller plus loin puisqu’il n’est pas premier)
Pour racine carrée de n, je ne comprends pas :??:

utilise donc la racine carré

OK !

Ca me faisait mal à la tête les maths le dimanche AM ! :smiley:

ben je fais deja ca avec le


    pour i de 2 jusqu'a I(n/2)I (partie entiere de n/2)  
                             // j'hesite avec racine carre de n sqrt(n)  
    si (n != i) et (n modulo i) ==0
        retourner faux
    fin si
   
  fin pour

des qu’il voit qu’il n’est pas premier il renvoi faux et sort de la boucle et de la fonction

jeanguy >> merci pour la confirmation

:jap:

au fait, g trouvé cette explication ici:
http://emmanuel-remy.developpez.com/C++/Instructions/TP.htm

ya un algo qui est proposé, le tiens semble bon :slight_smile:

ya juste ton test (i !=n) qui est inutile, vu que tu parcours de 2 à n/2

ah d’accord, je ne suis pas familier de ce langage. L’idée était la même avec la boucle tant que.

c’est vrai :wink:

merci pour le lien :jap:

Y a pas comme une petite contradiction dans ce qu tu appelles "la partie facile" ?
Si n=2 alors renvoyer "Vrai" et si (n modulo 2) = 0 alors renvoyer "Faux"…
Tel qul, on a à la fois vrai et faux pour n=2.

Ca revient un peu à la confusion que je faisais plus haut…
2 est un cas particulier et c’est pour ça qu’il le traite à part.
Si n=2 alors le programme s’arrête puisqu’il y a “retourner vrai”

edit : c’est comme mettre “retourner” dans une boucle for, moi je préfère une boucle while mais ça fait pareil

Ah bon. Merci pour l’info.

2 est le seul premier pair. Vu qu’il est divisible que par lui même et par un. :neutre:

Merci pour ta réponse Acidbao, mais la bonne réponse à ma remarque était en fait celle de Gp2. :wink:

:jap: :wink: