fork download
  1. -- valがminVal以上maxVal以下の整数の約数ならTrue、そうでないならFalseを返す
  2. isNotYakusu:: Integer -> Integer -> Integer -> Bool
  3. isNotYakusu minVal maxVal val = null $ filter (\a -> (mod a val) == 0) [minVal .. maxVal]
  4.  
  5. -- 条件に当てはまる数のリストを返す
  6. -- aが奇数ならa/2の整数部分はa未満、aが偶数ならa/2はaの約数なので、範囲に含まれていてもよい
  7. calc:: Integer -> Integer -> [Integer]
  8. calc minVal maxVal = filter (isNotYakusu minVal maxVal) [11 .. (div maxVal 2)]
  9.  
  10. -- リストの各要素をsepでつなげた文字列を返す
  11. joinList:: Show a => String -> [a] -> String
  12. joinList _ [] = ""
  13. joinList sep (l:lst) = foldl (\s e -> s ++ sep ++ (show e)) (show l) lst
  14.  
  15. -- 入力を受け取って、計算する
  16. main:: IO ()
  17. main = do
  18. minVal <- readLn
  19. maxVal <- readLn
  20. putStrLn $ joinList " " $ calc minVal maxVal
  21.  
Success #stdin #stdout 0s 6348KB
stdin
50
69
stdout
24