programmation Java (école d'ingénieur) · Chapitre 5 · Application directe du cours
Crible d'Ératosthène
Tableaux · niveau 2
Énoncé
Pour trouver tous les nombres premiers inférieurs à , on part d'un tableau de booléens premier[0..n-1] tous vrais ; on met et à faux ; puis, pour chaque encore marqué premier tel que , on raye (met à faux) tous les multiples de à partir de .
- Écrire
static boolean[] crible(int n). - Afficher les premiers inférieurs à , puis compter ceux qui sont inférieurs à un million.
- Pourquoi peut-on commencer à rayer à plutôt qu'à ?
Corrigé
static boolean[] crible(int n) { // premier[k] pour 0 <= k < n
boolean[] premier = new boolean[n];
Arrays.fill(premier, true);
premier[0] = false;
if (n > 1) premier[1] = false;
for (int p = 2; p * p < n; p++) {
if (premier[p]) {
for (int m = p * p; m < n; m += p) premier[m] = false;
}
}
return premier;
}
crible < 50 : 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
premiers < 1 000 000 : 78498
Un multiple avec a déjà été rayé lors du traitement du plus petit facteur premier de , qui est inférieur à . Le premier multiple de qui reste à rayer est donc . Pour la même raison, on s'arrête dès que : tous les nombres composés inférieurs à ont alors été rayés. Le crible traite un million de nombres en quelques millisecondes, bien plus vite que appels à estPremier.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.