Посмотрите, что делает ваше понимание списка.
n <- [x..y]
Нарисуйте n из списка в диапазоне от x
до y
.
y `mod` n == 0
Выберите только те n
, которые равномерно делят y.
length (...)
Найдите, сколько таких n
.
То, что ваш код в настоящее время делает, это выясняет, сколько чисел между x и y (включительно) являются факторами y. Поэтому, если вы сделаете f 2 4
, список будет [2, 4]
(числа, которые равномерно делят 4), а длина равна 2. Если вы сделаете f 2 10
, список будет `[2, 5, 10 ] (числа, которые равномерно делят 10), а длина равна 3.
Важно попытаться понять для себя , почему ваш код не работает. В этом случае это просто неправильный алгоритм. Для алгоритмов, которые находят, является ли число простым, среди многих других источников, вы можете проверить статью в Википедии: Проверка на примитивность .