| |
Exercice 13 : Crible d'Eratosthène
1. Enoncé
Afficher la liste des nombres premiers inférieur à 4000 par la méthode du crible d'ératosthène.
Le principe du crible d'ératosthène est d'éliminer tous les multiples des nombres premiers trouvés.
2. Versions
Cliquez sur " " pour afficher/masquer le code |
Tout afficher/Tout masquer
| | | | |
 |  |  |
|
Algorithme |
 |
|
 |
 |
debut du programme Eratosthène.
pour i allant de 2 à max
tableau_de_nombre(i) <-- vrai
finpour
ecrire(1)
p <-- 2
repeter
ecrire(p)
pour i allant de 2 à i*p = max
tableau_de_nombre(i*p) <-- faux
finpour
repeter
p <-- p+1
jusqu'a tableau_de_nombre(p) ou p > max
jusqu'a p > max
ecrire('la liste des nombres premiers inférieures à ',max,' est terminée')
fin
|
|
 |  |  |
|
Pascal |
 |
|
 |
 |
program Eratosthene;
const
max = 5000;
var
tableau_de_nombre: array[1..max] of boolean;
p, i: integer;
begin
for i:=2 to max do
tableau_de_nombre[i] := true;
writeln('1');
p := 2;
repeat
writeln(p);
for i:=2 to max div p do
tableau_de_nombre[i*p] := false;
repeat
inc(p);
until ((tableau_de_nombre[p]) or (p > max))
until (p > max);
writeln('La liste des nombres premiers inférieures à ',max,' est terminée')
end.
|
|
 |  |  |
|
C |
 |
|
 |
 |
#include <stdio.h>
#define vrai 1
#define faux 0
#define max 5000
typedef unsigned char booleen;
main () {
unsigned int i,p;
booleen tableau_de_nombre[max];
printf("Crible d'Eratosthene pour les nombres inférieurs à %hd\n",max);
for (i=0; i<max; i++) {
tableau_de_nombre[i] = vrai;
}
p = 2;
printf ("1, ");
do {
printf("%hd ,",p);
for (i=2; i<max/p; i++) {
tableau_de_nombre[i*p] = faux;
}
do {
p++;
} while (tableau_de_nombre [p] == faux);
} while (p < max);
return 0;
}
|
|
 |  |  |
|
Python |
 |
|
 |
 |
max = 5000
true = 0
false = 1
a = []
for i in range(max):
a.append(true)
print 1
p = 2
while p < max:
print p
for i in range(2,max/p):
a[p*i] = false
p = p+1
while ((p < max) and (a[p] == false)):
p = p+1
print 'la liste des nombres premiers inférieures à ',max,' est terminée'
|
|
 |  |  |
|
Java |
 |
|
 |
 |
import java.util.Vector;
public class exo {
static int max = 4000;
static Vector tableau_de_nombre = new Vector();
public static void main (String[] args) {
Integer vrai = new Integer(1);
Integer faux = new Integer(0);
for (int i=0; i<max; i++) {
tableau_de_nombre.addElement(vrai);
}
System.out.print("1, ");
int p = 2;
do {
System.out.print(p + ", ");
for (int i=2; i*p<max; i++) {
tableau_de_nombre.setElementAt(faux,i*p);
}
do {
p++;
} while ((p < max) && (faux.equals(tableau_de_nombre.elementAt(p))));
} while (p < max);
System.out.println ("\nla liste des nombres premiers inférieures à " + max + " est terminée");
}
}
|
|
|
Page modifiée le : 11/09/2003
Site modifié le : 12/04/2011
Flux RSS : cliquez-ici si vous voulez suivre les évolutions
Contacter le webmaster : si vous trouvez qu'il manque des infos, n'hésitez pas à me le dire !
| |
» Commentaires
Si vous souhaitez ajouter un commentaire,
vous devez être identifié.