-- valがminVal以上maxVal以下の整数の約数ならTrue、そうでないならFalseを返す isNotYakusu:: Integer -> Integer -> Integer -> Bool isNotYakusu minVal maxVal val = null $ filter (\a -> (mod a val) == 0) [minVal .. maxVal] -- 条件に当てはまる数のリストを返す -- aが奇数ならa/2の整数部分はa未満、aが偶数ならa/2はaの約数なので、範囲に含まれていてもよい calc:: Integer -> Integer -> [Integer] calc minVal maxVal = filter (isNotYakusu minVal maxVal) [11 .. (div maxVal 2)] -- リストの各要素をsepでつなげた文字列を返す joinList:: Show a => String -> [a] -> String joinList _ [] = "" joinList sep (l:lst) = foldl (\s e -> s ++ sep ++ (show e)) (show l) lst -- 入力を受け取って、計算する main:: IO () main = do minVal <- readLn maxVal <- readLn putStrLn $ joinList " " $ calc minVal maxVal