Codeforces 26A - A. Almost Prime
素因数分解したときに、素因数の種類が 2 つかどうか求める問題。
import Data.List factorize :: Int -> [Int] factorize 1 = [1] factorize n = fac 2 n where fac p n | n == 1 = [] | n `mod` p == 0 = p : fac p (n `div` p) | otherwise = fac (p+1) n isAlmostPrime :: Int -> Bool isAlmostPrime n = 2 == (length $ nub $ factorize n) calc :: Int -> Int calc n = sum [1 | i <- [1..n], isAlmostPrime i] main = do s <- getLine print $ calc $ read s
リストの中にpredを満たすものがいくつあるか個数を返す関数が標準ライブラリにありそうだと思って調べたけれど見つかりませんでした。