macro_rules! sieve_segment { ($n:expr; < $lim:expr) => { ... }; ($n:expr; >= $lim:expr) => { ... }; }
Expand description
Call sieve_geq or sieve_lt, and automatically compute the memory requirement of the sieve.
Sieve the N smallest numbers larger than or equal to some limit as sieve_segment!(N; >= LIMIT),
and the N largest numbers smaller than some limit as sieve_segment!(N; < LIMIT).
Computes the sieve size as isqrt(upper_limit) + 1 for sieve_lt
and as isqrt(lower_limit) + 1 + N for sieve_geq.
This may overestimate the memory requirement for sieve_geq.
§Examples
const PRIME_STATUS_LT: Result<[bool; 5], SieveError> = sieve_segment!(5; < 100_005);
const PRIME_STATUS_GEQ: Result<[bool; 7], SieveError> = sieve_segment!(7; >= 615);
assert_eq!(
PRIME_STATUS_LT,
// 100_000 100_101 100_102 100_103 100_104
Ok([false, false, false, true, false])
);
assert_eq!(
PRIME_STATUS_GEQ,
// 615 616 617 618 619 620 621
Ok([false, false, true, false, true, false, false])
);§Errors
Has the same error behaviour as sieve_geq and sieve_lt, with the exception
that it sets MEM such that the sieve doesn’t run out of memory.