Struct primal::StreamingSieve
source · 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§
source§impl StreamingSieve
impl StreamingSieve
sourcepub fn prime_pi(n: usize) -> usize
pub fn prime_pi(n: usize) -> usize
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);
Trait Implementations§
Auto Trait Implementations§
impl Freeze for StreamingSieve
impl RefUnwindSafe for StreamingSieve
impl Send for StreamingSieve
impl Sync for StreamingSieve
impl Unpin for StreamingSieve
impl UnwindSafe for StreamingSieve
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more