Scheme: Sieve of Eratosthenes
The Sieve of Eratosthenes is an ancient technique (attributed to Eratosthenes, yes) for finding all prime numbers less than or equal to a given number n. It runs in O(n log log n) time but, after the initial overhead, you can check for the primality of any number in O(1) time.
A rough sketch of how it works is as follows,
- List down all the numbers from 1 to n.
- Assume that all numbers are marked as "prime". Starting with 2, run through the list, proceeding in this manner:
- If the number is marked as "prime", mark all its multiples (save for the number itself—multiple of 1) as "not prime".
- Otherwise, if the number has been marked as "not prime", leave it as it is.
- Do this until you finish the list. (Actually, it is safe to do this only up to the square root of n.)
Wikipedia has a pretty accurate article on the matter.
Downloads
- Download source. Source is written in the Advanced Student module of
PLT Scheme (now known as PLT Racket). I made use of Advanced Student's
vector
data structure.