Разбейте его на более простые шаги.
Напишите функцию, divides :: Int -> Int -> Bool
такую, чтобы
x `divides` n
было истинным, когда x является делителем n.Итак, сначала подумайте, что означает для x
делитель n
.
Теперь у вас есть способ проверить, является ли одно число x
делителем n
Вам нужно проверить определенный диапазон чисел меньше n
, чтобы увидеть, какие из них являются делителями.
Подсказка: в Haskell вы можете сгенерировать список чисел от 1 до n
, например, так: [1..n]
Это та функция, которую вы упомянули, filter
будет полезной.Проверьте его тип:
filter :: (a -> Bool) -> [a] -> [a]
Просто замените a
выше на Int
.
Что касается функции isPrime
, просто подумайте, что означает, что число является простым ... если вы правильно рассчитали свои делители, вы можете проверить список, чтобы убедиться, что оно соответствуетс этим свойством.
Если этот является вопросом, связанным с домашним заданием, вы обязательно должны пометить его домашним заданием, тогда люди не будут так стесняться помогать:)