-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPrime.hs
More file actions
27 lines (22 loc) · 696 Bytes
/
Prime.hs
File metadata and controls
27 lines (22 loc) · 696 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
module Prime where
prime :: Integer -> Bool
prime n | n < 1 = error "Not a positive integer"
| n == 1 = False
| n == 2 = True
| otherwise = ldp n == n
ldp :: Integer -> Integer
ldp n = ldpf (primesTo n) n
ldpf :: [Integer] -> Integer -> Integer
ldpf [] _ = 0
ldpf (p:ps) n | rem n p == 0 = p
| p^2 > n = n
| otherwise = ldpf ps n
primesTo :: Integer -> [Integer]
primesTo n = takeWhile ( < n) primes
primes :: [Integer]
primes = 2 : primes'
where
primes' = sieve [3,5..] 9 primes'
sieve (x:xs) q ps@ ~(p:t)
| x < q = x : sieve xs q ps
| otherwise = sieve [x | x <- xs, x `mod` p > 0] (head t^2) t