Nombre premier

delta X -  
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
ben voila j'ai un petit souci, je dois faire un algorithme sur les nombres premiers mais jsuis pa très fort.
Je dois saisir un tableau des nombres de 2 à 1000 et remplacer par 0 les nombres qui ne sont pas premier.

voila ce que j'ai fait mais mon prof m'a dit qu'il fallait revoir la seconde étape:

Variable
a(2...1000) // tableau d'entier
x :entier // x correspond au multiple (*2,*3 etc)
i,m : entier

Debut
Pour i ←2 À 1000 // première étape
a(i) ← i
Fin pour
Pour i ←2 À 1000 // seconde étape
x ← 1, t ← 1
If a(i) ≠ 0
Tant que m <= 1000
x ← x+1
m ← a(i)*x
a(m)<-0
Fin Tant que
Fin si
Fin pour


Donc si quelqu'un pourrait m'aider sa serait sympa =)

6 réponses

loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Je vais te donner un exemple, mais ce n'est pas forcément le meilleur algorithme:
VARIABLE: i, x, tableau(1001)
POUR i = 0 à 1000
  tableau(i) <- vrai
i <- 1
REPETER
  i <- i+1
  SI tableau(i) est vrai
    x <- 2
    REPETER TANT QUE i*x < 1000
      tableau(i*x) <- faux
      x <- x+1
    FIN REPETER
  FIN SI
TANT QUE i*i < 1000
Bonne continuation.
1
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
1) je ne vois pas trop l'intéret du t . que fait-il ici ?
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
2)
Tant que m <= 1000

tu oublies que tu n'as encore donné aucune valeur à m lorsque cette boucle commence. Il suffit de rajouter un petit détail et ce sera bon. De plus m n'est pas remis "à zéro" après avoir exécuté une première fois les itérations de la boucle. Donc les passages suivants ne fonctionneront jamais. Ces deux erreurs sont corrigibles en une seule instruction ;).
0
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Comme l'a fait remarquer Pacorabanix dans un autre post, les codes non indentés sont illisibles. Comment pourrait-on faire pour que les nouveaux utilisent les balises adéquates.
Enfin pour cet algorithme, j'aurais plutôt utilisé un boucle:
REPETER (ou A FAIRE)
  ...
TANT QUE m <= 1000
Quant au 'x', l'initialisation doit se faire en dehors de la boucle.
Mettre de préférence les mots clés en MAJUSCULES (DEBUT, FIN, VARIABLE, ...).
Bonne continuation.
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
pour le x, il est bon endroit il me semble, il doit être réinitialisé à chaque passe de la boucle principale de la seconde partie.

PS : oui, pour les balises code mon cher et estimé loupius, je t'enjoins à aller "plussunnoyer" mon sujet dans le forum Suggestion à ce propos :)
0
Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663 > Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention  
 
0
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148 > Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention  
 
Mea culpa, le 'x' est effectivement bien placé; le code est tellement difficile à lire !
On ne peut que 'plusser' les réponses, pas les questions.
Bonne nuit.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
le concombre d'Ératosthène
 
Autre léger problème :
en supposant avoir
m <- 0
Tant que m <= 1000
  x <- x+1
  m <- a(i)*x
  a(m)<-0
Fin Tant que
on va forcément avoir un moment où m <= 1000 et a(i)*x > 1000
donc lorsque l'on va faire m <- a(i)*x, m > 1000
et accéder à a(m) provoquera une erreur !!!
0
delta X
 
Tout d'abord,merci pour vos réponses.

A LOUPIOS

Mon prof m'avait conseillé de faire:

Répèter
...
Tant que..
mais je ne le maitrise pas très bien comme vous avez pu le constater donc si tu pouvais me l'ecrire pour que je vois , se serait sympas,merci.

Au fait: les questions sont (pour vous aider):
-initialiser un tableau avec les elements 2 3 4 ..... 1000

-cribler en remplacant 4,6,8,...100,6,9,...,99,...par 0
0