Crible d'eratosthene

Contenu du snippet

Montre dynamiquement le crible d'Eratosthene, sur 100 nombres (de 1 a 100).

Pour faire l'etape suivante, il faut appuyer sur une touche.
Pour faire automatiquement, appuyer sur 'a'.
Pour quitter, appuyer sur 'q'.

COMPILATEUR: Turbo C (borland)
Le code est bourrin !

Source / Exemple :


#include <conio.h>
#include <dos.h>
/***********************************************/
#define COLOR_TEXT	YELLOW
#define BKCOLOR_TEXT      BROWN
/***********************************************/
#define ANYTHING          		0
#define PRIME 		1
#define NO_PRIME		2
/***********************************************/
#define COLOR_ANYTHING        BLUE
#define COLOR_PRIME 	    GREEN+BLINK
#define COLOR_NO_PRIME	   RED
/***********************************************/
#define BKCOLOR_ANYTHING      WHITE
#define BKCOLOR_PRIME 	       BLACK
#define BKCOLOR_NO_PRIME      BLACK
/***********************************************/
void Fill(int *tab)
{
int i;
for(i=1;i<=100;i++)
	{

  • tab = ANYTHING;
tab ++; } } /***********************************************/ void Print(int *tab) { int i,j; textbackground(BLACK); clrscr(); for(i=0;i<10;i++) { for(j=0;j<10;j++) { gotoxy(1+5*i,1+2*j); switch(tab[10*j+i]) { case ANYTHING: textcolor(COLOR_ANYTHING); textbackground(BKCOLOR_ANYTHING); break; case PRIME: textcolor(COLOR_PRIME); textbackground(BKCOLOR_PRIME); break; case NO_PRIME: textcolor(COLOR_NO_PRIME); textbackground(BKCOLOR_NO_PRIME); break; } cprintf("%3d",10*j+i+1); } } } /***********************************************/ int main(void) { int tabNumber[100]; int n,i; int boolDrawAll = 0; int key; int nbPrime = 0; Fill(tabNumber); /* on ne fait pas le 1, car par la definition d'un nombre premier, celui-ci peut etre divisible par 1 (meme si tous les nombres le sont !)
  • /
/* 1, n'est pas n'est pas un nombre premier */ tabNumber[0] = NO_PRIME; for(n=2;n<=100;n++) { /* si on ne l'a pas ici exclu, c'est un nombre premier */ if(tabNumber[n-1] != NO_PRIME) { tabNumber[n-1] = PRIME; nbPrime ++; } /* si i<n, cela ne sert a rien ! */ for(i=n+1;i<=100;i++) { /* si 'n' est un diviseur de 'i' */ if(i%n == 0) { tabNumber[i-1] = NO_PRIME; } } /* on re-affiche le tableau */ Print(tabNumber); textcolor(COLOR_TEXT); textbackground(BKCOLOR_TEXT); cprintf("\r\n\r\n"); cprintf("Nombre courant : %3d\r\n",n); cprintf("Nombres premiers (%2d): \r\n",nbPrime); /* on affiche les nombres premier trouver */ for(i=0;i<n;i++) { if(tabNumber[i] == PRIME) { cprintf("%d ",i+1); } } /* si on veut quitter ! */ if(!boolDrawAll) { key = getch(); /* on quitte */ if(key == 'q') { break; } /* on dessine tout */ else if(key == 'a') { boolDrawAll = 1; } } else { /* si on a decteter l'appuye d'une touche, on quitte */ if(kbhit()) { break; } } } return 0; }

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.