Problème programme C

Problème programme C - C - Programmation

Marsh Posté le 20-02-2013 à 17:27:48    

Bonjour à tous,
 
Je dois réaliser un petit programme en C. On commence par entrer un entier N. Le but est, en utilisant une boucle for, de dire si chaque entier compris entre 1 et N est premier ou non.
 
Mon problème est qu'une fois que la boucle atteint un entier non premier, tous les nombres suivants sont considérés comme non premier ..
 

Code :
  1. #include <stdio.h>
  2. int main()
  3. {int i=2,S=1,N,q,j;
  4. scanf("%i",&N);
  5. for(j=2;j<=N;j++) {
  6. for(i=2;i<j&&S==1;i=i+1) {
  7. q=j/i;
  8. if (q*i==j){S=0;} ;
  9. }
  10. printf("La solution pour %i est S=%i\n",j,S);
  11. }
  12. }


 
Le problème vient-il de la condition d'arrêt à la ligne 6 ?
 

Reply

Marsh Posté le 20-02-2013 à 17:27:48   

Reply

Marsh Posté le 20-02-2013 à 21:01:38    

Pour savoir si un nombre est premier, le plus simple est d'utiliser le modulo, ton code deviendra bien plus simple :
 

Code :
  1. for(j=2; j<=N; j++) {
  2.   if (N % j == 0) {
  3.     printf("%j est un nombre premier\n",j);
  4.   }
  5. }


Message édité par yann39 le 20-02-2013 à 21:02:12

---------------
Topic achats/ventes | Feed-back | Worklog
Reply

Marsh Posté le 20-02-2013 à 22:12:09    

Bonsoir, il faudrait surtout penser à réinitialiser S à 1 entre les 2 boucles for, sinon, en effet, une fois un nombre non premier trouvé, S est mis à 0 pour de bon et tous les autres ressortiront comme non premiers.

Reply

Marsh Posté le 26-02-2013 à 13:52:52    

Bonjour
Inutile de boucler jusqu'à N. Imaginons un nombre N qui aurait deux diviseurs x et y (avec x < y). Sitôt la boucle arrivée à x, y est alors trouvé par contrecoups et la boucle ne l'atteindra jamais.
 
Faut boucler jusqu'à V(N) ou alors tant que N / j > j...


Message édité par Sve@r le 26-02-2013 à 13:53:28

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

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