int main() { std::vector<int> v(500); sift0(begin(v), 50); std::cout << "sift0(begin(v), 50):\n"; print_sieve(begin(v), 50); sift1(begin(v), 50); std::cout << "sift1(begin(v), 50):\n"; print_sieve(begin(v), 50); sift(begin(v), 500); std::cout << "sift(begin(v), 500):\n"; print_sieve(begin(v), 500); std::cout << "gcm(15, 9) = " << gcm(15, 9) << std::endl; }
int main (int argc, char **argv) { if (argc!=2) { fprintf (stderr, "Usage: ./sieve <n>\ncalcule et affiche les nombres premiers inferieurs a <n>.\n"); fflush (stderr); exit (10); /* non mais! */ } { int n; int *bits; n = atoi (argv[1]); // conversion chaine -> entier. if (n<2) { fprintf (stderr, "Ah non, quand meme, un nombre >=2, s'il-vous-plait...\n"); fflush (stderr); exit (10); } bits = malloc (8*n); // allouer de la place pour n entiers (booleens). // Ca prend 32 fois trop de place. Mais C-- n'a pas les operations &, |, // qui nous permettraient de manipuler des bits individuellement... if (bits==NULL) { fprintf (stderr, "%d est trop gros, je n'ai pas assez de place memoire...\n"); fflush (stderr); exit (10); } zero_sieve (bits, n); bits[0] = bits[1] = 1; fill_sieve (bits, n); print_sieve (bits, n); free (bits); // et on libere la place memoire allouee pour bits[]. } return 0; }