id:Ozy:20060603#p2 id:Ozy:20060604#p1から。 何となく気になったんで、Haskellで実装。……まあもっと簡単になるとは思うけど。 以下、組合せを求めるのに必要な部分のみ抜粋。 dfoldl _ z [] _ = z dfoldl _ z _ [] = z dfoldl f z (x:xs) (y:ys) = dfoldl f (f z x y) xs ys comb :: (Integral a) => a -> a -> a comb _ 0 = 1 comb n r = dfoldl (?x a b -> x * b `div` a) 1 (take (fromIntegral r2) [1..]) (take (fromIntegral r2) [n,n-1..1]) where r2 = if r > (n `div` 2) then n -