Double factorial and primorial
Torbjorn Granlund
tg at gmplib.org
Wed Dec 21 16:40:50 CET 2011
Torbjorn Granlund <tg at gmplib.org> writes:
A corrected version:
for i = 0 ... Pi(2*S)-1
p = primevec[i].p
s = primevec[i].off
while s < S
sieve[s] = 1;
primevec[i].off = s - 2*S
while true
<p,off> = pop(heap)
if (off >= s0 + 2*S)
break
sieve[off - s0] = 1;
off = off + p
insert(heap, <p,off>)
The variable s0 represents the number corresponding to sieve[0].
Outside of this resieve code, s0 is updated: s0 = s0 + 2*S.
The heap is initialised with <p,p^2> for 2*S < p <= sqrt(N) for the
planned limit N. (It might be impractical to have a predetermined limit
N, in which case one needs to extend it as soon as s0+2*S-1 >= q^2 if q
is the largest prime currently in the heap.)
--
Torbjörn
More information about the gmp-devel
mailing list