Adloun

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

Exercice suivant et tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →