69問目
http://projecteuler.net/index.php?section=problems&id=69
n ≦ 1,000,000 について、オイラーのトーティエント関数 φ(n) を考えるとき、 n/φ(n) が最大になるような n を求める。
n の素因数の種類が多いほど φ(n) は小さくなるので、素数を小さいものから掛け合わせ、1000000以下で最大の値を求めます。
main = print $ euler069 1000000 euler069 :: Int -> Int euler069 m = last $ takeWhile (<= m) $ scanl1 (*) primes primes :: [Int] primes = 2 : filter isPrime [3..] isPrime :: Int -> Bool isPrime x = all ((/= 0) . mod x) $ takeWhile (<= (floor $ sqrt $ fromIntegral x)) primes