Seth Troisi braintwo at gmail.com
Wed May 22 16:57:54 UTC 2019

On Tue, May 21, 2019 at 11:49 AM Niels Möller <nisse at lysator.liu.se> wrote:

> Seth Troisi <braintwo at gmail.com> writes:
> > 3. Use Legendre's Formula (github
> > <https://github.com/sethtroisi/libgmp/pull/9>)
> Any reference for this method? I've never read anything about efficient
> computation of the nth prime. A web search turns up this sketch:
> https://programmingpraxis.com/2011/07/22/counting-primes-using-legendres-formula/
> ,
> but it's not clear to me for how large sizes it is practical.

https://github.com/kimwalisch/primecount has state-of-the-art
implementations of several prime counting algorithms/methods.
There are paralleled and highly optimized for just this calculation but it
suggests Legendre's method can calculate prime_pi(10^13) in <1 second.
I'm targeting nth_prime(10^9) in <10 second. Currently it takes ~40 seconds
on my high-end machine.

http://mathworld.wolfram.com/PrimeCountingFunction.html is a reasonable
starting place and includes some references on the various methods.
They also have a page about the method

This paper references some of the history

> It seems clear that an efficient nth prime can be implemented on top of
> an efficient \pi(k) = (number of primes <= k): Given n, first find some
> k such that \pi(k) \approx n, e.g., based on asymptotics and/or binary
> search. Next, compute \pi(k) exactly. Then enumerate primes close to k
> (sieving + primality tests) to identify the nth prime.

Mathematica (and some references) refer to this as prime_pi(k) = (number of
primes <= k) which I'll use below

My implementation uses the approximation
nth_prime(n) = n * ( log(n) + (log(log(n)) - 1))
I then refine this guess twice by calculating error = n - prime_pi(guess),
guess += log(n) * error
then calling next_prime(guess) some small number of times (this could
easily be improved with a sieve but in practice takes less than 5% of total

My plan is to get [1] and [2] checked in, do some optimization of phi(n, x)
and check in [3].
After that look at the trade-off in readability, memory, and performance
for implementing Meissel's method.

*GMP has next_prime but no prev_prime so I have to make sure to

On Tue, May 21, 2019 at 9:50 AM Niels Möller <nisse at lysator.liu.se> wrote:

> Seth Troisi <braintwo at gmail.com> writes:
> > I think 1. and 2. are as clean as I know how to make them (I don't see a
> > style guide so apology for formatting / style differences),
> To answer the easy question: See
> https://www.gnu.org/prep/standards/standards.html
> Regards,
> /Niels
> --
> Niels Möller. PGP-encrypted email is preferred. Keyid 368C6677.
> Internet email is subject to wholesale government surveillance.

More information about the gmp-devel mailing list