Exemple #1
0
void
Sievelgmp::eratosthene() {
  cout << "In eratosthene A = " << A << "   B = " << B << endl;
  int p;
  int ip = K+1; // Le rang du premier premier non precrible 
  int64 sqrt_B = root(B); // QUEL SQRT
  cout << "sqrt_B = " << sqrt_B << endl;
  
  if (sqrt_B > max_prime()) {
    cout << "Dans eratoshene : pas assez de nombres premiers\n";
    //    cout << "SQRT_B = " << sqrt_B << " maxp = " << max_prime() << "\n";
    cout << "Crible aux. pour enumerer les premiers manquants " << endl;
    auxprimes.setup(100000020,MAX64);
    auxprimes.eratosthene();
    auxprimes.set_cursor_on(max_prime());
    int64 p = auxprimes.next_prime();
    cout << "auxprime current prime " << p << endl;
  }

  if (A <= 1)
    unset_bit(0);
  p = prime(ip++);
  cout << "Crible 1 jusqu'a p= " <<  min(sqrt_B,max_prime()) << endl;
  while (p  <= min(sqrt_B,max_prime()))
    {
      sieve_by(p);
      //cout << "sieve by " << p << endl;
      if (A <= p){ // Il est de toute facon <= LMAX
	set_bit(index(p));
      }
      p = prime(ip++);
    } 
  int cnt = 0;
  if (sqrt_B > max_prime()) {
      cout << "Crible complementaire " << endl;
      int64 p = auxprimes.current_prime();
      while (p <= sqrt_B) {
	cnt++;
	//	cout << "Crible par p p = " << p << endl;
	if (p > SIZE)
	  sieve_by_long(p);
	else sieve_by(p);
	p =  auxprimes.next_prime();
      }
      cout << "Fin du crible complementaire" << endl;
      // cout << "p = " << p << endl;
    }
  cursor  = 0;
#if SIEVE_LNG_VERBOSE > 0
  cout << "Apres eratosthene : \n";
  cout << "Nombre de premiers complementaires = " << cnt << endl;

#endif
}
Exemple #2
0
void
Sievelng<longint>::eratosthene() {
  int p;
  int ip = K+1; // Le rang du premier premier non precrible 
  int64 sqrt_B = root(B); // QUEL SQRT
  cerr << "size of sqrt_B = " << sizeof(sqrt_B) << endl;
  if (sqrt_B > max_prime()) {
    cerr << "Dans eratoshene,,, : pas assez de nombres premiers\n";
    cerr << "SQRT_B = " << sqrt_B << " maxp = " << max_prime() << "\n";
    cerr << "Crible aux. pour enumerer les premiers manquants " << endl;
    //    auxprimes.setup(100000020,MAX64);
    cerr <<" SIZE == " << SIZE << endl;
    int szx;
    if (SIZE > INT_MAX)
      szx = 2000000010;
    else szx = SIZE;
    cerr << "szx = " << szx << endl;
    auxprimes.setup(szx,MAX64);
    auxprimes.set_at_left(max_prime());
    auxprimes.eratosthene();
    cerr << "auxprime eratosthene is done" << endl;
    auxprimes.set_cursor_on(max_prime());
    cerr << "auxprime cursor is on maxprime() = " 
	 << auxprimes.current_prime() << endl;
    int64 p = auxprimes.next_prime();
    cerr << "Premier nombre premier complementaire  " << p << endl;
  }

  if (A <= 1)
    unset_bit(0);
  p = prime(ip++);
  cerr << "Crible 1 jusqu'a p= " <<  min(sqrt_B,max_prime()) << endl;
  cerr << "premier p = " << p << endl;
  while (p  <= min(sqrt_B,max_prime()))
    {
      //cerr << "sieve by " << p << endl;
      sieve_by(p);
      if (A <= p){ // Il est de toute facon <= LMAX
	set_bit(index(p));
      }
      p = prime(ip++);
    } 
  int cnt = 0;
  if (sqrt_B > max_prime()) {
    cerr << "Crible complementaire " << endl;
    int64 p = auxprimes.current_prime();
    while (p <= sqrt_B) {
      cnt++;
      if (p > SIZE)
	sieve_by_long(p);
      else sieve_by(p);
      p =  auxprimes.next_prime();
    }
    cerr << "Fin du crible complementaire" << endl;
  }
  cursor  = 0;
#if SIEVE_LNG_VERBOSE > 0
  cerr << "Nombre de premiers complementaires = " << cnt << endl;
#endif
}
Exemple #3
0
int main(void)
{
 
    int num_in; 
	num_in = 100;        /* the number U have*/

	int max_num = 0;
	
    /* calculate the max prime in num */

	max_num = max_prime(num_in);
	
    printf("max prime num is  = %d \n", max_num);

    return 0;
}