Anonymous user
Stirling numbers of the first kind: Difference between revisions
m
→{{header|Haskell}}
(added Haskell) |
|||
Line 490:
main :: IO ()
main = do
printf "n/k"
mapM_ (printf "%10d") ([0..12] :: [Int]) >> printf "\n"
mapM_ (\row -> printf "%2d|" (fst $ head row) >>
mapM_ (printf "%10d" . uncurry sterling1) row >> printf "\n") table
maximum ([sterling1 100 n | n <- [1..100]] :: [Integer])
where
table :: [[(Int, Int)]]
table =
Or library: monad-memo for memoization. Seems to be a few milliseconds slower.
Line 523:
main :: IO ()
main = do
printf "n/k"
mapM_ (printf "%10d") ([0..12] :: [Int]) >> printf "\n"
mapM_ (\row -> printf "%2d|" (fst $ head row) >>
mapM_ (printf "%10d" . uncurry sterling1Memo) row >> printf "\n") table
maximum ([sterling1Memo 100 n | n <- [1..100]] :: [Integer])
where
table :: [[(Int, Int)]]
table =
{{out}}
<pre>n/k 0 1 2 3 4 5 6 7 8 9 10 11 12
-------------------------------------------------------------------------------------------------------------------------------------
0|
4|
5|
6|
7|
8|
12| 0 39916800 120543840 150917976 105258076 45995730 13339535 2637558 357423 32670 1925 66 1
The maximum value of S1(100, k):
19710908747055261109287881673376044669240511161402863823515728791076863288440277983854056472903481625299174865860036734731122707870406148096000000000000000000</pre>
|