Safe Haskell | None |
---|---|
Language | Haskell2010 |
Some important number sequences.
See the "On-Line Encyclopedia of Integer Sequences", https://oeis.org .
Synopsis
- factorial :: Integral a => a -> Integer
- factorialSplit :: Integral a => a -> Integer
- factorialNaive :: Integral a => a -> Integer
- factorialSwing :: Integral a => a -> Integer
- factorialPrimeExponents :: Int -> [(Integer, Int)]
- factorialPrimeExponentsNaive :: forall a. Integral a => a -> [(Integer, Int)]
- factorialPrimeExponents_ :: Int -> [Int]
- swingFactorialExponents_ :: Int -> [Int]
- doubleFactorial :: Integral a => a -> Integer
- doubleFactorialSplit :: Integral a => a -> Integer
- doubleFactorialNaive :: Integral a => a -> Integer
- binomial :: Integral a => a -> a -> Integer
- binomialSplit :: Integral a => a -> a -> Integer
- binomialNaive :: Integral a => a -> a -> Integer
- signedBinomial :: Int -> Int -> Integer
- pascalRow :: Integral a => a -> [Integer]
- multinomial :: Integral a => [a] -> Integer
- catalan :: Integral a => a -> Integer
- catalanTriangle :: Integral a => a -> a -> Integer
- signedStirling1stArray :: Integral a => a -> Array Int Integer
- signedStirling1st :: Integral a => a -> a -> Integer
- unsignedStirling1st :: Integral a => a -> a -> Integer
- stirling2nd :: Integral a => a -> a -> Integer
- bernoulli :: Integral a => a -> Rational
- bellNumbersArray :: Integral a => a -> Array Int Integer
- bellNumber :: Integral a => a -> Integer
Factorial
factorialSplit :: Integral a => a -> Integer Source #
Faster implementation of the factorial function
factorialNaive :: Integral a => a -> Integer Source #
Naive implementation of factorial
factorialSwing :: Integral a => a -> Integer Source #
"Swing factorial" algorithm
factorialPrimeExponents :: Int -> [(Integer, Int)] Source #
Prime factorization of the factorial (using the "swing factorial" algorithm)
factorialPrimeExponents_ :: Int -> [Int] Source #
swingFactorialExponents_ :: Int -> [Int] Source #
Prime factorizaiton of the "swing factorial" function)
doubleFactorial :: Integral a => a -> Integer Source #
The double factorial
doubleFactorialSplit :: Integral a => a -> Integer Source #
Faster implementation of the double factorial function
doubleFactorialNaive :: Integral a => a -> Integer Source #
Naive implementation of the double factorial (A006882).
Binomial and multinomial
binomial :: Integral a => a -> a -> Integer Source #
Binomial numbers (A007318). Note: This is zero for n<0
or k<0
; see also signedBinomial
below.
binomialSplit :: Integral a => a -> a -> Integer Source #
Faster implementation of binomial
binomialNaive :: Integral a => a -> a -> Integer Source #
A007318. Note: This is zero for n<0
or k<0
; see also signedBinomial
below.
signedBinomial :: Int -> Int -> Integer Source #
The extension of the binomial function to negative inputs. This should satisfy the following properties:
for n,k >=0 : signedBinomial n k == binomial n k for any n,k : signedBinomial n k == signedBinomial n (n-k) for k >= 0 : signedBinomial (-n) k == (-1)^k * signedBinomial (n+k-1) k
Note: This is compatible with Mathematica's Binomial
function.
pascalRow :: Integral a => a -> [Integer] Source #
A given row of the Pascal triangle; equivalent to a sequence of binomial numbers, but much more efficient. You can also left-fold over it.
pascalRow n == [ binomial n k | k<-[0..n] ]
multinomial :: Integral a => [a] -> Integer Source #
Catalan numbers
catalanTriangle :: Integral a => a -> a -> Integer Source #
Catalan's triangle. OEIS:A009766. Note:
catalanTriangle n n == catalan n catalanTriangle n k == countStandardYoungTableaux (toPartition [n,k])
Stirling numbers
signedStirling1stArray :: Integral a => a -> Array Int Integer Source #
Rows of (signed) Stirling numbers of the first kind. OEIS:A008275.
Coefficients of the polinomial (x-1)*(x-2)*...*(x-n+1)
.
This function uses the recursion formula.
signedStirling1st :: Integral a => a -> a -> Integer Source #
(Signed) Stirling numbers of the first kind. OEIS:A008275.
This function uses signedStirling1stArray
, so it shouldn't be used
to compute many Stirling numbers.
Argument order: signedStirling1st n k
unsignedStirling1st :: Integral a => a -> a -> Integer Source #
(Unsigned) Stirling numbers of the first kind. See signedStirling1st
.
stirling2nd :: Integral a => a -> a -> Integer Source #
Stirling numbers of the second kind. OEIS:A008277. This function uses an explicit formula.
Argument order: stirling2nd n k
Bernoulli numbers
bernoulli :: Integral a => a -> Rational Source #
Bernoulli numbers. bernoulli 1 == -1%2
and bernoulli k == 0
for
k>2 and odd. This function uses the formula involving Stirling numbers
of the second kind. Numerators: A027641, denominators: A027642.
Bell numbers
bellNumbersArray :: Integral a => a -> Array Int Integer Source #
Bell numbers (Sloane's A000110) from B(0) up to B(n). B(0)=B(1)=1, B(2)=2, etc.
The Bell numbers count the number of set partitions of a set of size n
bellNumber :: Integral a => a -> Integer Source #
The n-th Bell number B(n), using the Stirling numbers of the second kind.
This may be slower than using bellNumbersArray
.