The Meissel–Lehmer algorithm (after
Ernst Meissel and
Derrick Henry Lehmer) is an
algorithm
In mathematics and computer science, an algorithm () is a finite sequence of rigorous instructions, typically used to solve a class of specific Computational problem, problems or to perform a computation. Algorithms are used as specificat ...
that computes exact values of the
prime-counting function
In mathematics, the prime-counting function is the function counting the number of prime numbers less than or equal to some real number ''x''. It is denoted by (''x'') (unrelated to the number ).
History
Of great interest in number theory is t ...
.
Description
The problem of counting the exact number of primes less than or equal to x, without actually listing them all, dates from
Legendre. He observed from the
Sieve of Eratosthenes
In mathematics, the sieve of Eratosthenes is an ancient algorithm for finding all prime numbers up to any given limit.
It does so by iteratively marking as composite (i.e., not prime) the multiples of each prime, starting with the first prime n ...
that
:
where
is the
floor function, which denotes the greatest integer less than or equal to x and the
run over all primes
.
Since the evaluation of this sum formula is becoming more and more complex and confusing for large x, Meissel tried to simplify the counting of the numbers in the Sieve of Eratosthenes. He and Lehmer introduced therefore certain sieve functions, which are detailed below.
Key functions
Let
be the first ''n'' primes. For natural number ''a'' ≥ 1, define
:
which counts natural numbers no greater than ''x'' with all prime factors greater
. Also define for natural number ''k'',
:
which counts natural numbers no greater than ''x'' with exactly ''k'' prime factors, all larger than
. With these, we have
:
where the sum only has finitely many nonzero terms, because
when
. Using the fact that
, we get
:
which prove that one may compute
by computing
and
for ''k'' ≥ 2. This is what the Meissel–Lehmer algorithm does.
Formula for ''P''''k''(''x'', ''a'')
For ''k'' = 2, we get the following formula for
:
:
For ''k'' ≥ 3, the identities for
can be derived similarly.
Expanding ''𝜑''(''x'', ''a'')
Using the recurrence
:
may be expanded. Each summand, in turn, may be expanded in the same way.
Combining the terms
The only thing that remains to be done is evaluating
and
for ''k'' ≥ 2, for certain values of ''x'' and ''a''. This can be done by direct sieving and using the above formulas.
History
Meissel already found that for ''k'' ≥ 3,
if
. He used the resulting equation for calculations of
for big values of
.
Meissel calculated
for values of ''x'' up to
, but he narrowly missed the correct result for the biggest value of ''x''.
Using his method and an
IBM 701
The IBM 701 Electronic Data Processing Machine, known as the Defense Calculator while in development, was IBM’s first commercial scientific computer and its first series production mainframe computer, which was announced to the public on May ...
, Lehmer was able to compute the correct value of
and missed the correct value of
by 1.
Extended algorithm
Jeffrey Lagarias,
Victor Miller and
Andrew Odlyzko published a realisation of the algorithm which computes
in time
and space
for any
.
Upon setting
, the tree of
has
leaf nodes.
This extended Meissel-Lehmer algorithm needs less computing time than the algorithm developed by Meissel and Lehmer, especially for big values of ''x''.
Further improvements of the algorithm are given by M. Deleglise and J. Rivat in 1996.
References
{{DEFAULTSORT:Meissel-Lehmer algorithm
Number theoretic algorithms