약수
divisors :: Int -> [Int]
divisors n =
[x | x <- [1..n `div` 2], n `rem` x == 0] ++ [n]
- 수학의 조건 제시법처럼 Haskell은 list comprehention을 이용해서 표현할 수 있다. 원래 자기 자신을 포함해서 조건을 제시해야 하지만, 약수의 성질을 이용해서 자신의 반수까지 약수를 구한 뒤 자기 자신을 추가해준다.
공약수
import Data.List
ommonDivisor :: Int -> Int -> [Int]
commonDivisor x y = divisors x `intersect` divisors y
- 두 수의 약수 집합의 교집합이 공약수.
intersect
는 교집합을 구하는 원소. Data.List
모듈에 있다.
소수
isPrime :: Int -> Bool
isPrime n = divisors n == [1,n]
primes :: Int -> [Int]
primes n = [x | x <- [2..n], isPrime x]