Nombre premier
delta X
-
loupius Messages postés 789 Statut Membre -
loupius Messages postés 789 Statut Membre -
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 =)
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 =)
Configuration: Windows Vista Internet Explorer 7.0
6 réponses
-
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 < 1000Bonne continuation. -
1) je ne vois pas trop l'intéret du t . que fait-il ici ?
-
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 ;). -
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. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Autre léger problème :
en supposant avoirm <- 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 !!! -
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