primesieve  8.0
Public Member Functions | Public Attributes | List of all members
primesieve::iterator Struct Reference

primesieve::iterator allows to easily iterate over primes both forwards and backwards. More...

#include <iterator.hpp>

Public Member Functions

 iterator () noexcept
 Create a new iterator object. More...
 
 iterator (uint64_t start, uint64_t stop_hint=std::numeric_limits< uint64_t >::max()) noexcept
 Create a new iterator object. More...
 
void skipto (uint64_t start, uint64_t stop_hint=std::numeric_limits< uint64_t >::max()) noexcept
 Reset the primesieve iterator to start. More...
 
 iterator (const iterator &)=delete
 primesieve::iterator objects cannot be copied.
 
iteratoroperator= (const iterator &)=delete
 
 iterator (iterator &&) noexcept
 primesieve::iterator objects support move semantics.
 
iteratoroperator= (iterator &&) noexcept
 
 ~iterator ()
 Frees all memory.
 
void clear () noexcept
 Frees most memory, but keeps some smaller data structures (e.g. More...
 
void generate_next_primes ()
 
void generate_prev_primes ()
 
uint64_t next_prime ()
 Get the next prime. More...
 
uint64_t prev_prime ()
 Get the previous prime. More...
 

Public Attributes

std::size_t i_
 
std::size_t size_
 
uint64_t start_
 
uint64_t stop_hint_
 
uint64_t * primes_
 
void * memory_
 

Detailed Description

primesieve::iterator allows to easily iterate over primes both forwards and backwards.

Generating the first prime has a complexity of O(r log log r) operations with r = n^0.5, after that any additional prime is generated in amortized O(log n log log n) operations. The memory usage is PrimePi(n^0.5) * 8 bytes.

Examples
prev_prime.cpp, and primesieve_iterator.cpp.

Constructor & Destructor Documentation

◆ iterator() [1/2]

primesieve::iterator::iterator ( )
noexcept

Create a new iterator object.

Generate primes > 0. The start number is default initialized to 0 and the stop_hint is default initialized UINT64_MAX.

◆ iterator() [2/2]

primesieve::iterator::iterator ( uint64_t  start,
uint64_t  stop_hint = std::numeric_limits< uint64_t >::max() 
)
noexcept

Create a new iterator object.

Parameters
startGenerate primes > start (or < start).
stop_hintStop number optimization hint, gives significant speed up if few primes are generated. E.g. if you want to generate the primes below 1000 use stop_hint = 1000.

Member Function Documentation

◆ clear()

void primesieve::iterator::clear ( )
noexcept

Frees most memory, but keeps some smaller data structures (e.g.

the PreSieve object) that are useful if the primesieve::iterator is reused. The remaining memory uses at most 200 kilobytes.

◆ next_prime()

uint64_t primesieve::iterator::next_prime ( )
inline

Get the next prime.

Returns UINT64_MAX if next prime > 2^64.

Examples
primesieve_iterator.cpp.

◆ prev_prime()

uint64_t primesieve::iterator::prev_prime ( )
inline

Get the previous prime.

prev_prime(n) returns 0 for n <= 2. Note that next_prime() runs up to 2x faster than prev_prime(). Hence if the same algorithm can be written using either prev_prime() or next_prime() it is preferable to use next_prime().

Examples
prev_prime.cpp.

◆ skipto()

void primesieve::iterator::skipto ( uint64_t  start,
uint64_t  stop_hint = std::numeric_limits< uint64_t >::max() 
)
noexcept

Reset the primesieve iterator to start.

Parameters
startGenerate primes > start (or < start).
stop_hintStop number optimization hint, gives significant speed up if few primes are generated. E.g. if you want to generate the primes below 1000 use stop_hint = 1000.
Examples
prev_prime.cpp.

The documentation for this struct was generated from the following file: