In mathematics, the Sieve of Eratosthenes is a simple, ancient algorithm for finding all prime numbers up to a specified integer[1]. It works efficiently for the smaller primes (below 10 million) [2]. It was created by Eratosthenes, an ancient Greek mathematician. When the Sieve of Eratosthenes is used in computer programming, wheel factorization is often applied before the sieve to increase the speed.
Contents |
1 Create a contiguous list of numbers from two to some highest number n.
2 Strike out from the list all multiples of two (4, 6, 8 etc.).
3 The list's next number that has not been struck out is a prime number.
4 Strike out from the list all multiples of the number you identified in the previous step.
5 Repeat steps 3 and 4 until you reach a number that is greater than the square root of n (the highest number in the list).
6 All the remaining numbers in the list are prime.
The crossing-off of multiples of each found prime number can be started at the square of the number, as lower multiples have already been crossed out during the previous steps.
The complexity of the algorithm is with a memory requirement of
[3]. The segmented version of the sieve of Eratosthenes, with basic optimizations such as wheel factorization, uses
operations and
bits of memory[4].
David Turner [5] suggested in 1975 that the sieve of Eratosthenes could be represented in a strikingly simple and elegant way in purely functional programming languages. Turner's sieve, rendered in Haskell, is:
primes = sieve [2..] sieve (p : xs) = p : sieve [x | x <− xs, x ‘mod‘ p > 0]
However, Melissa O'Neill [6] showed that the complexity of Turner's algorithm is significantly worse than the complexity of the classical imperative renditions of the sieve. O'Neill demonstrated simple renditions of the sieve of Eratosthenes in Haskell with complexities similar to those of the classical algorithms.
A poem, replicating the essence of the algorithm, is as follows:[7]
Sift the Two's and sift the Three's,
The Sieve of Eratosthenes.
When the multiples sublime,
The numbers that remain are Prime.
|