My thanks to the following people, without whom primecount wouldn’t be what it is today. (Please let me know if I’ve mistakenly omitted anyone.)
David Baugh
David was the most extensive
user of primecount during early development. He reported numerous bugs
and suggested a lot of useful features e.g. backup functionality &
standalone flags for all deleglise-rivat formulas. David also broke many
world records using primecount e.g. A006880, A006988, A122121, A040014.
Dana Jacobsen
Dana
explained to me in great detail the optimizations used in his phi(x, a)
implementation and also the implementation of the inverse logarithmic
integral using Newton’s method.
Curtis
Seizert
Curtis partially implemented Xavier Gourdon’s
combinatorial prime counting algorithm and wrote a
paper comparing the Deleglise-Rivat algorithm, Tomás Oliveira e
Silva’s version of the Deleglise-Rivat algorithm and Gourdon’s
algorithm. This improved my understanding of Gourdon’s
algorithm.
Douglas Staple
After computing pi(10^26)
using his own program Douglas Staple published a paper with his
improvements to the Deleglise-Rivat algorithm. I use Douglas Staple’s
improvements for the computation of the ordinary leaves and the
multi-threading of the hard special leaves.
Christian Bau
Christian Bau wrote the first
open source implementation of the extended Meissel-Lehmer prime counting
algorithm in 2003. I use Christian’s FactorTable idea to reduce the
memory usage and also his fast integer division trick (use 32-bit
instead of 64-bit whenever possible).
Dennis
Mitchell
Dennis wrote a highly optimized implementation
(in 2016) of the meissel prime counting algorithm which was faster than
primecount for x <= 1010. Dennis’s implementation replaced
integer division by multiplication & bit shifts. After studying his
implementation I also implemented this trick in primecount.
ridiculousfish
primecount uses ridiculousfish’s libdivide library
to replace integer division by multiplication & bit shifts. This
optimization speeds up the computation of the easy special leaves by
about 40%. ridiculousfish added a branchfree divider to libdivide
specifically for primecount.