Problem 155
コンテンツ
http://projecteuler.net/index.php?section=problems&id=155
メモリ不足になったりした。
素直なアルゴリズム。
import Data.Array import qualified Data.Set as S n = 18 main = print.sum.map S.size.elems$ caps caps = listArray (1,n) $ (S.singleton 1) : map c' [2..n] :: Array Int (S.Set Rational) where c n = S.fromList $ do k <-[1..div n 2] c1 <- S.toList$caps!k c2 <- S.toList$caps!(n-k) c <- [c1+c2,(c1*c2)/(c1+c2)] return c c' n = foldl (S.) (c n) $ map (caps!) [1..n-1]
遅いけど、このアルゴリズムをjavaで実装するのは面倒だ。
有理数クラスあるのかな?
作成者 Toru Mano
最終更新時刻 2023-01-01 (c70d5a1)