void pushBack_N_Primes(uint64_t n, uint64_t start) { n_ = n; PrimeSieve ps; std::size_t newSize = primes_.size() + static_cast<std::size_t>(n_); primes_.reserve(newSize); try { while (n_ > 0) { // choose stop > nth prime uint64_t logx = 50; uint64_t dist = n_ * logx + 10000; uint64_t stop = start + dist; // fix integer overflow if (stop < start) stop = get_max_stop(); ps.callbackPrimes(start, stop, this); start = stop + 1; if (stop >= get_max_stop()) throw primesieve_error("cannot generate primes > 2^64"); } } catch (cancel_callback&) { } }
void pushBackPrimes(uint64_t start, uint64_t stop) { if (start <= stop) { std::size_t prime_count = approximate_prime_count(start, stop); primes_.reserve(primes_.size() + prime_count); PrimeSieve ps; ps.callbackPrimes(start, stop, this); } }
void pushBack_N_Primes(uint64_t n, uint64_t start) { n_ = n; std::size_t newSize = primes_.size() + static_cast<std::size_t>(n_); primes_.reserve(newSize); PrimeSieve ps; try { while (n_ > 0) { uint64_t logn = 50; // choose stop > nth prime uint64_t stop = start + n_ * logn + 10000; ps.callbackPrimes(start, stop, this); start = stop + 1; } } catch (cancel_callback&) { } }
void callback_primes(uint64_t start, uint64_t stop, Callback<uint64_t>* callback) { PrimeSieve ps; ps.setSieveSize(get_sieve_size()); ps.callbackPrimes(start, stop, callback); }