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 }
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 }
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; }