Euler question 7
parent
a0fef78e65
commit
9db5fd08e6
|
@ -0,0 +1,32 @@
|
|||
-- https://projecteuler.net/problem=7
|
||||
-- Find the 10_001 prime number
|
||||
|
||||
primes1 :: [Integer]
|
||||
primes1 = 2:3:prs
|
||||
where
|
||||
1:p:candidates = [6*k+r | k <- [0..], r <- [1,5]]
|
||||
prs = p : filter isPrime candidates
|
||||
isPrime n = not (any (divides n) (takeWhile (\p -> p*p <= n) prs))
|
||||
divides n p = n `mod` p == 0
|
||||
|
||||
|
||||
primes2 = 2:([3..] `minus` composites)
|
||||
where
|
||||
composites = union [multiples p | p <- primes2]
|
||||
|
||||
multiples n = map (n*) [n..]
|
||||
|
||||
(x:xs) `minus` (y:ys) | x < y = x:(xs `minus` (y:ys))
|
||||
| x == y = xs `minus` ys
|
||||
| x > y = (x:xs) `minus` ys
|
||||
union = foldr merge [ ]
|
||||
where
|
||||
merge (x:xs) ys = x:merge' xs ys
|
||||
merge' (x:xs) (y:ys) | x < y = x:merge' xs (y:ys)
|
||||
| x == y = x:merge' xs ys
|
||||
| x > y = y:merge' (x:xs) ys
|
||||
|
||||
|
||||
primes3 = sieve [2..]
|
||||
where
|
||||
sieve (p : xs) = p : sieve [x | x <- xs, x `mod` p > 0]
|
Loading…
Reference in New Issue