Filename: prob47.hs
-- Prob 47
-- The first two consecutive numbers to have two distinct prime factors are:
--
-- 14 = 2 7
-- 15 = 3 5
--
-- The first three consecutive numbers to have three distinct prime factors are:
--
-- 644 = 2² 7 23
-- 645 = 3 5 43
-- 646 = 2 17 19.
--
-- Find the first four consecutive integers to have four distinct primes factors. What is the first of these numbers?
module Prob47
where
import Data.List (group)
import Data.List
factor n (p:ps)
| p*p > n = [n]
| n `mod` p == 0 = p : factor (n `div` p) (p:ps)
| otherwise = factor n ps
primes = 2 : filter ((==1) . length . primeFactors) [3,5..]
primeFactors n = factor n primes
uniquePF n = Data.List.nub (primeFactors n)
-- get_five y = zip y (zip (tail y) (zip (tail (tail y)) (zip (tail(tail(tail y))) (tail(tail (tail (tail y)))))))
get_four y = zip (tail y) (zip (tail(tail y)) (zip (tail(tail(tail y))) (tail(tail(tail(tail y))))))
matches x = not((fst(x) == 4) && (fst(snd(x)) == 4) && (fst(snd(snd(x))) == 4) && (snd(snd(snd(x))) == 4))
answer = length(takeWhile (matches) (get_four (map length (map uniquePF [1..])))) + 2
syntax highlighted by Code2HTML, v. 0.9.1
No comments:
Post a Comment