blob: b07f2ee058c5ea5b8904afef2fa0f76fce20c451 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
-- credit: https://ideone.com/e81
module OthersPrimeNumber
( primesTME
) where
primesTME :: [Int]
primesTME = 2 : ([3,5..] `minus` foldt [ [p*p,p*p+2*p..] | p <- primes_ ])
where
primes_ = 3 : ([5,7..] `minus` foldt [ [p*p,p*p+2*p..] | p <- primes_ ])
foldt ~((x:xs):t) = x : union xs (foldt (pairs t))
pairs ~((x:xs):ys:t) = (x : union xs ys) : pairs t
minus :: [Int] -> [Int] -> [Int]
minus xs@(x:xt) ys@(y:yt) = case compare x y of
LT -> x : minus xt ys
EQ -> minus xt yt
GT -> minus xs yt
minus a b = a
union :: [Int] -> [Int] -> [Int]
union xs@(x:xt) ys@(y:yt) = case compare x y of
LT -> x : union xt ys
EQ -> x : union xt yt
GT -> y : union xs yt
|