fonction int premier(long n) - C - Programmation
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
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.
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...
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
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
Marsh Posté le 19-11-2005 à 22:36:48
Où est le test décidant si le nombre est premier ou pas?
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
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
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
Marsh Posté le 19-11-2005 à 22:59:28
et accessoirement ne pas recalculer la racine a chaque itération...
Marsh Posté le 20-11-2005 à 02:00:52
Et incrémenter i de 2 dans la boucle.
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).
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
Marsh Posté le 20-11-2005 à 17:37:20
Pas tout à fait. Cette méthode s'appelle "wheel factorization ".
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