Project Euler 53
main =getLine >>= \n-> (print $ sum $ map euler53 [1.. read n]) euler53 :: Integer -> Integer euler53 n = euler53' n n euler53' :: Integer -> Integer -> Integer euler53' n 0 = 0 euler53' n r = check53 (combinate n r) + euler53' n (r-1) kaijo :: Integer -> Integer kaijo k = foldr (*) 1 [1..k] check53 :: Integer -> Integer check53 n = if n > 1000000 then 1 else 0 combinate :: Integer -> Integer -> Integer combinate n r = (kaijo n)`div`((kaijo r)*(kaijo (n-r)))
n=23 ---> 4
n=24 ---> 11
n=100 ---> 4075
と出ました。
euler53関数が美しくない。
てか要らない。
カリー化使ったりして消せないかな。でもnを変更できないからなー
あ、これを、mainからの入力指定ではなく、固定にしたらいいのか。確かに
問題解くだけだしね。
しかし外部入力できた方が検査もしやすい遊びやすい笑