1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| #include <stdio.h>
#include <stdlib.h>
#define N_ELEMS(array) ( sizeof (array) / sizeof *(array) )
void purge(void)
{
int c;
while ((c = fgetc(stdin)) != '\n' && c != EOF)
{
}
}
/* -tc- main() retourne un entier de type int, toujours! Par ailleurs, cet
entier doit etre 0, EXIT_SUCCESS ou EXIT_FAILURE. */
int main(void)
{
/* -tc- C'est une pratique recommandee de definir une seule variable
par ligne. */
int nombre;
int n;
int i;
int premier[10000] = {0};
int chiffre;
int rv;
do
{
printf("Saisir un nombre : ");
/* -tc- Pour etre portable, il est necessaire de forcer l'affichage avec
flush(). */
fflush(stdout);
rv = scanf("%d", &chiffre);
/* -tc- A ce stade, il reste au minimum un caractere de fin de lign
dans le tampon du flux d'entree standard. Il faut purger. */
purge();
}
while (rv != 1);
n = 0;
if (chiffre > 2)
{
premier[n] = 2;
n++;
}
for (nombre = 3; n < N_ELEMS(premier) && nombre < chiffre; nombre += 2)
{
int est_premier = 1;
for (i = 0; est_premier == 1 && i < n && premier[i] * premier[i] <= nombre; i++)
{
if (nombre % premier[i] == 0)
{
est_premier = 0;
}
}
if (est_premier == 1)
{
premier[n] = nombre;
n++;
}
}
for (i = 0; i < n; i++)
{
printf("%d est un nombre premier.\n", premier[i]);
}
/* -tc- inutile sur tous les EDIs modernes et pas portable
system("pause");
*/
return 0;
} |