September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
23
Task/Bernoulli-numbers/Haskell/bernoulli-numbers-1.hs
Normal file
23
Task/Bernoulli-numbers/Haskell/bernoulli-numbers-1.hs
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
import Data.Ratio
|
||||
import System.Environment
|
||||
|
||||
main = getArgs >>= printM . defaultArg
|
||||
where
|
||||
defaultArg as =
|
||||
if null as
|
||||
then 60
|
||||
else read (head as)
|
||||
|
||||
printM m =
|
||||
mapM_ (putStrLn . printP) .
|
||||
takeWhile ((<= m) . fst) . filter (\(_, b) -> b /= 0 % 1) . zip [0 ..] $
|
||||
bernoullis
|
||||
|
||||
printP (i, r) =
|
||||
"B(" ++ show i ++ ") = " ++ show (numerator r) ++ "/" ++ show (denominator r)
|
||||
|
||||
bernoullis = map head . iterate (ulli 1) . map berno $ enumFrom 0
|
||||
where
|
||||
berno i = 1 % (i + 1)
|
||||
ulli _ [_] = []
|
||||
ulli i (x:y:xs) = (i % 1) * (x - y) : ulli (i + 1) (y : xs)
|
||||
17
Task/Bernoulli-numbers/Haskell/bernoulli-numbers-2.hs
Normal file
17
Task/Bernoulli-numbers/Haskell/bernoulli-numbers-2.hs
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
import Data.Ratio (numerator, denominator, (%))
|
||||
|
||||
bernouillis :: Integer -> [Rational]
|
||||
bernouillis =
|
||||
let faulhaber rs n = (:) =<< (-) 1 . sum $ zipWith ((*) . (n %)) [2 ..] rs
|
||||
in fmap head . tail . scanl faulhaber [] . enumFromTo 0
|
||||
|
||||
bernouilliTable :: Integer -> String
|
||||
bernouilliTable =
|
||||
let row i x =
|
||||
[ concat ["B(", show i, ") = ", show n, "/", show (denominator x)]
|
||||
| let n = numerator x
|
||||
, n /= 0 ]
|
||||
in unlines . concat . zipWith row [0 ..] . bernouillis
|
||||
|
||||
main :: IO ()
|
||||
main = putStrLn (bernouilliTable 60)
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
module Main where
|
||||
|
||||
import Data.Ratio
|
||||
import System.Environment
|
||||
|
||||
main = getArgs >>= printM . defaultArg where
|
||||
defaultArg as = if null as then 60 else read (head as)
|
||||
|
||||
printM m = mapM_ (putStrLn . printP) . takeWhile ((<= m).fst)
|
||||
. filter (\(_,b) -> b /= 0%1) . zip [0..] $ bernoullis
|
||||
|
||||
printP (i,r) = "B(" ++ show i ++ ")=" ++ show (numerator r) ++ "/" ++ show (denominator r)
|
||||
|
||||
bernoullis = map head . iterate (ulli 1) . map berno $ enumFrom 0 where
|
||||
berno i = 1 % (i+1)
|
||||
ulli _ [_] = []
|
||||
ulli i (x:y:xs) = (i%1)*(x-y) : ulli (i+1) (y:xs)
|
||||
Loading…
Add table
Add a link
Reference in a new issue