pub struct StreamingSieve { /* private fields */ }
Expand description

A heavily optimised prime sieve.

This is a streaming segmented sieve, meaning it sieves numbers in intervals, extracting whatever it needs and discarding it. See Sieve for a wrapper that caches the information to allow for repeated queries, at the cost of O(limit) memory use.

This uses O(sqrt(limit)) memory, and is designed to be as cache-friendly as possible. StreamingSieve should be used for one-off calls, or simple linear iteration.

The design is heavily inspired/adopted from Kim Walisch’s primesieve, and has similar speed (around 5-20% slower).

Examples

let count = primal::StreamingSieve::prime_pi(123456);
println!("𝜋(123456) = {}", count);

Implementations

Count the number of primes upto and including n, that is, 𝜋, the prime counting function.

Examples
assert_eq!(primal::StreamingSieve::prime_pi(10), 4);
// the endpoint is included
assert_eq!(primal::StreamingSieve::prime_pi(11), 5);

assert_eq!(primal::StreamingSieve::prime_pi(100), 25);
assert_eq!(primal::StreamingSieve::prime_pi(1000), 168);

Compute pn, the n prime number, 1-indexed (i.e. p1 = 2, p2 = 3).

Panics

n must be larger than 0 and less than the total number of primes in this sieve (that is, self.prime_pi(self.upper_bound())).

Example
assert_eq!(primal::StreamingSieve::nth_prime(1_000), 7919);

Trait Implementations

Formats the value using the given formatter. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.