1. Enoncé
Afficher la liste des nombres premiers inférieurs à 4000 par la méthode du crible d'Eratosthène.
Le principe du crible d'Eratosthène est d'éliminer tous les multiples des nombres premiers trouvés.
En partant de 2, il faut "cocher" 4, 6, 8.... Ensuite, il faut refaire la même chose pour 3 en cochant 6, 9, 12... et continuer ainsi de suite.
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 à %hdn",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");
}
}
|
|
|