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;
}
Esempio n. 2
0
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;
}