#haskell #functional-programming #primes
#хаскелл #функциональное программирование #простые числа
Вопрос:
В настоящее время я работаю над тем, чтобы попытаться найти количество простых чисел между диапазоном в хаскелле. Программа правильно выводит диапазон простых чисел. Например количество отправлений до 2 10 будет распечатано [2, 3, 5, 7]. Я ищу число 4, потому что именно столько простых чисел находится в диапазоне от 2 до 10. Как правильно включить количество простых чисел?
import Data.List countPrimesUntil :: Integral a=gt; a -gt; a -gt; [a] countPrimesUntil a b = takeWhile (lt;= b) $ dropWhile (lt; a) $ sieve [2..] while sieve (n:ns) = n:sieve [m | m lt;- ns, m `mod` n /= 0] countPrimes n = length([x | x lt;- [2..n], countPrimesUntil x])
Комментарии:
1.
while
должно бытьwhere
Ответ №1:
countPrimesUntil
это неправильное название; это ничего не значит. Скорее, он создает список простых чисел между a
и b
включительно.
Все , что вам нужно сделать, это применить length
к результату countPrimesUntil
, когда даны аргументы 2
и n
.
countPrimes n = length (countPrimesUntil 2 n) -- countPrimes = length . countPrimesUntil 2
Ответ №2:
В этом случае countPrimes
вызовы countPrimesUntil 2 n
и определяет их длину , так что:
countPrimes n = length (countPrimesUntil 2 n)