一人でやるとしたら簡単なほうから5問は確実に行くだろうけど... 残りの問題はコーディングが面倒な感じかと思われる.間違っても Haskell では書きたくない.ProblemA でさえHaskell だと面倒だ(インデックス使えんので).
import Control.Monad main = getProblems >>= mapM_ (putStrLn.show.cnt) getProblems = do n <- liftM read getLine if n==0 then return [] else liftM (n:) getProblems primes = let p (x:xs) = x:p (filter (\y -> not (mod y x ==0)) xs) in p [2..] cnt n = cn primes primes 0 0 where cn ps qs sum c = if sum >= n then cn (tail ps) qs (sum-head ps) (c+if sum==n then 1 else 0) else (if n < head qs then c else cn ps (tail qs) (sum+head qs) c)
素数の生成はエレガントに書けるけど入出力がうざい.ところで Y コンビネータのラムダ式ってどうだっけ? olymorphic lambda calculus もよくわからん... free theorem の根拠が...
- Newer: AWK - はじめ