If you don’t know what the Sieve of Eratosthenes is, don’t worry because a few days ago neither did I. But in short it is a very simple way to calculate prime numbers. Essentially you loop through all integers and keep a list of numbers which are known to be composite. If you encounter a number which isn’t in your list, then it is prime. At which point you add all multiples of that prime number to your list, since you know they are composite.

There is definitely room for improvement in my implementation, it’s a good example of using F# Computation Expressions to generate a sequence of prime numbers.

#light

// Reference System.Core in the v3.5 framework for 'HashSet'
#r @"C:\Windows\assembly\GAC_MSIL\System.Core\3.5.0.0__b77a5c561934e089\System.Core.dll"

open System
open System.Collections.Generic

let primesUnderOneMillion =
seq {
// First prime

yield 2

let knownComposites = new HashSet<int>()

// Loop through all odd numbers; evens can't be prime

for i in 3 .. 2 .. int 1E6 do

// Check if its in our list, if not, its prime

let found = knownComposites.Contains(i)
yield
i

// Add all multiples of i to our sieve, starting
// at i and irecementing by i.

do for j in i .. i .. int 1E6 do