30 lines
668 B
Text
30 lines
668 B
Text
module fsieve
|
|
|
|
import StdClass; // RWS
|
|
import StdInt, StdReal
|
|
|
|
NrOfPrimes :== 3000
|
|
|
|
primes :: [Int]
|
|
primes = pr where pr = [5 : sieve 7 4 pr]
|
|
|
|
sieve :: Int !Int [Int] -> [Int]
|
|
sieve g i prs
|
|
| isPrime prs g (toInt (sqrt (toReal g))) = [g : sieve` g i prs]
|
|
| otherwise = sieve (g + i) (6 - i) prs
|
|
|
|
sieve` :: Int Int [Int] -> [Int]
|
|
sieve` g i prs = sieve (g + i) (6 - i) prs
|
|
|
|
isPrime :: [Int] !Int Int -> Bool
|
|
isPrime [f:r] pr bd
|
|
| f>bd = True
|
|
| pr rem f==0 = False
|
|
| otherwise = isPrime r pr bd
|
|
|
|
select :: [x] Int -> x
|
|
select [f:r] 1 = f
|
|
select [f:r] n = select r (n - 1)
|
|
|
|
Start :: Int
|
|
Start = select [2, 3 : primes] NrOfPrimes
|