-- A unit fraction contains 1 in the numerator. The decimal representation of the unit fractions with denominators 2 to 10 are given: -- -- 1/2 = 0.5 -- 1/3 = 0.(3) -- 1/4 = 0.25 -- 1/5 = 0.2 -- 1/6 = 0.1(6) -- 1/7 = 0.(142857) -- 1/8 = 0.125 -- 1/9 = 0.(1) -- 1/10 = 0.1 -- -- Where 0.1(6) means 0.166666..., and has a 1-digit recurring cycle. It can be seen that 1/7 has a 6-digit recurring cycle. -- -- Find the value of d < 1000 for which 1/d contains the longest recurring cycle in its decimal fraction part. removeFactor :: (Integral a) => a -> a -> a removeFactor f n | n `mod` f /= 0 = n | otherwise = removeFactor f (n `div` f) findCycleLengthRecursive :: (Integral a) => a -> a -> a -> a findCycleLengthRecursive n j k | n == 1 = 0 | k `mod` n == 0 = j | otherwise = findCycleLengthRecursive n (j+1) (k * 10 + 9) findCycleLength :: (Integral a) => a -> a findCycleLength n = findCycleLengthRecursive ((removeFactor 2 . removeFactor 5) n) 1 9 maxRepeatingCycle :: (Integral a) => a -> a -> a maxRepeatingCycle a b = snd . maximum $ zip xs [1..] where xs = map findCycleLength [a..b] main = do let result = maxRepeatingCycle 1 999 putStrLn $ "Project Euler, Problem 26\n" ++ "Answer: " ++ show result