Nombre premier

Fermé
delta X - 16 déc. 2009 à 14:04
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 17 déc. 2009 à 17:19
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 dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
17 déc. 2009 à 17:19
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 jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
16 déc. 2009 à 23:25
1) je ne vois pas trop l'intéret du t . que fait-il ici ?
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
16 déc. 2009 à 23:28
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 dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
16 déc. 2009 à 23:57
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 jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
17 déc. 2009 à 00:33
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 jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661 > Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013
17 déc. 2009 à 00:41
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148 > Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013
17 déc. 2009 à 01:48
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
17 déc. 2009 à 05:25
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
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