Project Euler #5: Smallest multiple

  • + 0 comments

    Haskell

    import Control.Applicative
    import Control.Monad
    import System.IO
    
    c_gcd :: Int -> Int -> Int
    c_gcd a 0 = a
    c_gcd 0 b = b
    c_gcd a b 
        | a > b = c_gcd b (a `mod` b)
        | a < b = c_gcd a (b `mod` a)
    
    c_lcm :: Int -> Int -> Int
    c_lcm a b = (a * b) `div` (c_gcd a b)
    
    llcm :: [Int] -> Int
    llcm [x] = x
    llcm (x:xs) = c_lcm x (llcm xs)
    
    main :: IO ()
    main = do
        t_temp <- getLine
        let t = read t_temp :: Int
        forM_ [1..t] $ \a0  -> do
            n_temp <- getLine
            let n = read n_temp :: Int
            let n_list = [1..n]
            print (llcm n_list)