Nombre premier

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 =)
Configuration: Windows Vista Internet Explorer 7.0

6 réponses

  1. 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
    1. 1) je ne vois pas trop l'intéret du t . que fait-il ici ?
      0
      1. 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
        1. 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
          1. 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
          2. @PacorabanixMea 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
        2. 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
          1. 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