Exercice langage C : Nombres Premiers dans un Inventaire

Enoncé de l'exercice:

Écrire un programme permettant de déterminer les nombres premiers dans l'intervalle [1,n] à l'aide du crible d'Ératosthène.
Il consiste à former une table avec tous les entiers naturels compris entre 2 et n et à rayer (mise à zéro), les uns après les autres, les entiers qui ne sont pas premiers de la manière suivante : dès que l'on trouve un entier qui n'a pas encore été rayé, il est déclaré premier, et on raye tous les multiples de celui-ci.
À la fin du procédé, les nombres non barrés sont des nombres premiers.
On tiendra compte du fait qu'un nombre donné peut déjà avoir été éliminé en tant que multiple de nombres précédents déjà testés.
Par ailleurs, on sait que l'on peut réduire la recherche aux nombres de 2 à sqrt(n) (si un entier non premier est strictement supérieur à sqrt(n) alors il a au moins un diviseur inférieur à sqrt(n) et aura donc déjà été rayé).


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include 
#include 

§MEVBCBfint main()
{
  const int n = 1000;
  int       tab_nombres[n];
  int       imax;
  int       i, j;

  /*
   * Remplissage du tableau "tab_nombres"
   * à l'aide des nombres de 1 à 1000.
   */
  for( i=1; i
   /*
   * Impression des nombres non exclus
   * qui sont les nombres premiers cherchés.
   * Impression de 10 nombres par ligne.
   */
  printf( "Les nombres premiers entre 1 et "
          "%d sont :\n\n", n );
  for( i=1; i