fonction int premier(long n)

fonction int premier(long n) - C - Programmation

Marsh Posté le 19-11-2005 à 20:48:14    

bonjour tout le monde,je cherche une fonction int premier(long n) qui associe à n la valeur 1 si n est premier et retourne 0 si n n'est pas premier et cela doit etre ecrit en langage c.merci d avance pour votre aide

Reply

Marsh Posté le 19-11-2005 à 20:48:14   

Reply

Marsh Posté le 19-11-2005 à 20:52:37    

Dans la mesure où c'est plus que probablement pour un exercice scolaire, les règles du forum autorisent à t'aider (en corrigeant ton code ou en te guidant en partant de code à toi), mais pas à faire ton boulot.
(nb: ce ne serait pas un exercice scolaire, ce serait le même tarif).
 
Donc bonnes recherches :jap:
 
Un conseil néamoins: demandes toi quelle est la chose la plus simple qui caractérise un nombre premier, à partir du moment où tu as cette donnée concevoir un algorithme (peu efficace, mais ce n'est pas spécialement important) permettant de déterminer si un nombre est premier ou pas est trivial.


Message édité par masklinn le 19-11-2005 à 20:56:52

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 19-11-2005 à 21:08:31    

amouna4567 a écrit :

bonjour tout le monde,je cherche une fonction int premier(long n) qui associe à n la valeur 1 si n est premier et retourne 0 si n n'est pas premier et cela doit etre ecrit en langage c.merci d avance pour votre aide


Cherche dans ta tête...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 19-11-2005 à 22:29:04    

#include<stdio.h>
#include<conio.h>
#include<math.h>
int premier(long n)
{
 int test=1;
 int i;
 if(n>=3)
 {
     for(i=2;i<=sqrt(n);i++)
     {
         if(n%i==0)
     
         test=0;
         printf("%d",test);
      }
     
 }
return(test);
}
int main()
{
    int x,i;
    printf("entrer votre nombre:" );
    scanf("%d",&x);
    for(i=2;i<=sqrt(x);i++)
    premier(x);
    getch();
    return(0);
}
le voila mon code

Reply

Marsh Posté le 19-11-2005 à 22:32:57    

je ne sais où mettre le break pour que le programme sort de la boucle  dés qu il trouve que le nombre est premier

Reply

Marsh Posté le 19-11-2005 à 22:36:48    

Où est le test décidant si le nombre est premier ou pas?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 19-11-2005 à 22:40:13    

c est dans la boucle for si n%i=0(le reste de la division de n par i est nul) alors il est n est pas premier sinon il est premier

Reply

Marsh Posté le 19-11-2005 à 22:42:57    

amouna4567 a écrit :

c est dans la boucle for si n%i=0(le reste de la division de n par i est nul) alors il est n est pas premier sinon il est premier


Voila, t'as ta réponse ;)
(À partir du moment où tu as déterminé qu'un nombre n'est pas premier, tu n'as aucun intérêt à continuer, il ne redeviendra pas premier)
 
Accessoirement, tu peux utiliser directement des return, ça évite des breaks et une variable temporaire inutile :o
 
Et il serait plus logique d'avoir une fonction qui retourne des booléens plutôt que des entier, vu qu'un nombre est premier ou pas :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 19-11-2005 à 22:59:28    

et accessoirement ne pas recalculer la racine a chaque itération...


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 20-11-2005 à 02:00:52    

Et incrémenter i de 2 dans la boucle.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 20-11-2005 à 02:00:52   

Reply

Marsh Posté le 20-11-2005 à 04:23:24    

Si on va par là, à partir de 5 on peut aussi incrémenter i de 2, puis 4, puis 2, puis 4 et ainsi de suite. Ca évite les multiples de 2 et de 3. De même à partir de 7, tu peux trouver une séquence qui évite aussi les multiples de 5, mais après ça devient vite compliqué et le gain et de plus en plus faible (pour les flemmards, la séquence est 4, 2, 4, 2, 4, 6, 2, 6).

Reply

Marsh Posté le 20-11-2005 à 13:59:22    

matafan a écrit :

Si on va par là, à partir de 5 on peut aussi incrémenter i de 2, puis 4, puis 2, puis 4 et ainsi de suite. Ca évite les multiples de 2 et de 3. De même à partir de 7, tu peux trouver une séquence qui évite aussi les multiples de 5, mais après ça devient vite compliqué et le gain et de plus en plus faible (pour les flemmards, la séquence est 4, 2, 4, 2, 4, 6, 2, 6).


On utilise le Crible d''Eratostène quoi


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 20-11-2005 à 17:37:20    

Pas tout à fait. Cette méthode s'appelle "wheel factorization ".

Reply

Marsh Posté le 23-11-2005 à 21:32:41    

ok merci tout le monde j ai pu faire ma fonction

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed