import Control.Applicative import Data.List primes :: [Int] primes = 2 : [ x | x <- [3,5..], null $ filter (\z -> x `mod` z == 0) $ takeWhile (\y -> y^2 <= x) primes] main :: IO () main = do x <- read <$> getLine :: IO Int print $ solve x solve :: Int -> Int solve x = let (g, s) = foldr f (1, x) $ (takeWhile (\z -> z^2<= x) primes) in g * s where f a (y, m) = let (i, m') = rec a m 0 in (y * i, m') rec d z c | z `mod` d == 0 = rec d (z `div` d) (1-c) | otherwise = (d ^ c, z)