Liking cljdoc? Tell your friends :D

sicmutils.special.factorial

Namespace holding implementations of variations on the factorial function.

Namespace holding implementations of variations on the factorial function.
raw docstring

->bigintcljs

(->bigint x)

If x is a fixed-precision integer, returns a sicmutils.util/bigint version of x. Else, acts as identity.

This is useful in cases where you may want to multiply x by other large numbers, but don't want to try and convert something that can't overflow, like a symbol, into bigint.

If `x` is a fixed-precision integer, returns a [[sicmutils.util/bigint]]
version of `x`. Else, acts as identity.

This is useful in cases where you may want to multiply `x` by other large
numbers, but don't want to try and convert something that can't overflow,
like a symbol, into `bigint`.
sourceraw docstring

bellclj/s

(bell n)

Returns the nth Bell number, ie, the number of ways a set of n elements can be partitioned into nonempty subsets.

The nth Bell number is denoted $B_n$.

Returns the `n`th [Bell number](https://en.wikipedia.org/wiki/Bell_number), ie,
the number of ways a set of `n` elements can be partitioned into nonempty
subsets.

The `n`th Bell number is denoted $B_n$.
sourceraw docstring

binomial-coefficientclj/s

(binomial-coefficient n k)

Returns the binomial coefficient, ie, the coefficient of the $x^k$ term in the polynomial expansion of the binomial power $(1 + x)^n$.

This quantity is sometimes pronounced "n choose k".

For negative n or k, binomial-coefficient matches the behavior provided by Mathematica, described at this page. Given negative n, returns

;; for k >= 0
(* (expt -1 k)
   (binomial-coefficient (+ (- n) k -1) k))

;; for k >= 0
(* (expt -1 (- n k))
   (binomial-coefficient (+ (- k) -1) (- n k)))

;; otherwise:
0
Returns the [binomial
coefficient](https://en.wikipedia.org/wiki/Binomial_coefficient), ie, the
coefficient of the $x^k$ term in the polynomial expansion of the binomial
power $(1 + x)^n$.

This quantity is sometimes pronounced "n choose k".

For negative `n` or `k`, [[binomial-coefficient]] matches the behavior
provided by Mathematica, described at [this
page](https://mathworld.wolfram.com/BinomialCoefficient.html). Given negative
`n`, returns

```clj
;; for k >= 0
(* (expt -1 k)
   (binomial-coefficient (+ (- n) k -1) k))

;; for k >= 0
(* (expt -1 (- n k))
   (binomial-coefficient (+ (- k) -1) (- n k)))

;; otherwise:
0
```
sourceraw docstring

double-factorialclj/s

(double-factorial n)

Returns the product of all integers from 1 up to n that have the same parity (odd or even) as n.

([[double-factorial]] 0) is defined as an empty product and equal to 1.

double-factorial with argument n is equivalent to ([[multi-factorial]] n 2), but slightly more general in that it can handle negative values of n.

If n is negative and even, returns ##Inf.

If n is negative and odd, returns (/ (double-factorial (+ n 2)) (+ n 2)).

For justification, see the Wikipedia page on the extension of double factorial to negative arguments.

Returns the product of all integers from 1 up to `n` that have the same
parity (odd or even) as `n`.

`([[double-factorial]] 0)` is defined as an empty product and equal to 1.

[[double-factorial]] with argument `n` is equivalent to `([[multi-factorial]]
n 2)`, but slightly more general in that it can handle negative values of
`n`.

If `n` is negative and even, returns `##Inf`.

If `n` is negative and odd, returns `(/ (double-factorial (+ n 2)) (+ n 2))`.

For justification, see the [Wikipedia page on the extension of double
factorial to negative
arguments](https://en.wikipedia.org/wiki/Double_factorial#Negative_arguments).
sourceraw docstring

factorialclj/s

(factorial n)

Returns the factorial of n, ie, the product of 1 to n (inclusive).

factorial will return a platform-specific sicmutils.util/bigint given some n that causes integer overflow.

Returns the factorial of `n`, ie, the product of 1 to `n` (inclusive).

[[factorial]] will return a platform-specific [[sicmutils.util/bigint]] given
some `n` that causes integer overflow.
sourceraw docstring

factorial-powerclj/smultimethod

Alias for falling-factorial.

Alias for [[falling-factorial]].
sourceraw docstring

falling-factorialclj/smultimethod

(falling-factorial a b)

generic falling-factorial.

Returns the falling factorial, of a to the b, defined as the polynomial

$$(a)_b = a^{\underline{b}} = a(a - 1)(a - 2) \cdots (a - b - 1)$$

Given a negative b, ([[falling-factorial]] a b) is equivalent to (invert ([[rising-factorial]] (inc a) (- b))), or ##Inf if the denominator evaluates to 0.

The coefficients that appear in the expansions of falling-factorial called with a symbolic first argument and positive integral second argument are the Stirling numbers of the first kind (see stirling-first-kind).

generic falling-factorial.

Returns the [falling
  factorial](https://en.wikipedia.org/wiki/Falling_and_rising_factorials), of
  `a` to the `b`, defined as the polynomial

  $$(a)_b = a^{\underline{b}} = a(a - 1)(a - 2) \cdots (a - b - 1)$$

  Given a negative `b`, `([[falling-factorial]] a b)` is equivalent
  to `(invert ([[rising-factorial]] (inc a) (- b)))`, or `##Inf` if the
  denominator evaluates to 0.

  The coefficients that appear in the expansions of [[falling-factorial]] called
  with a symbolic first argument and positive integral second argument are the
  Stirling numbers of the first kind (see [[stirling-first-kind]]).
sourceraw docstring

multi-factorialclj/s

(multi-factorial n k)

Returns the product of the positive integers up to n that are congruent to (mod n k).

When k equals 1, equivalent to ([[factorial]] n).

See the [Wikipedia page on generalizations of double-factorial](https://en.wikipedia.org/wiki/Double_factorial#Generalizations) for more detail.

If you need to extend multi-factorial to negative n or k, that page has suggestions for generalization.

Returns the product of the positive integers up to `n` that are congruent
to `(mod n k)`.

When `k` equals 1, equivalent to `([[factorial]] n)`.

See the [Wikipedia page on generalizations
of [[double-factorial]]](https://en.wikipedia.org/wiki/Double_factorial#Generalizations)
for more detail.

If you need to extend [[multi-factorial]] to negative `n` or `k`, that page
has suggestions for generalization.
sourceraw docstring

pochhammerclj/smultimethod

Alias for falling-factorial.

Alias for [[falling-factorial]].
sourceraw docstring

rising-factorialclj/smultimethod

(rising-factorial a b)

generic rising-factorial.

Returns the rising factorial, of a to the b, defined as the polynomial

$$(a)^b = a^{\overline{b}} = a(a + 1)(a + 2) \cdots (a + b - 1)$$

Given a negative b, ([[rising-factorial]] a b) is equivalent to (invert ([[falling-factorial]] (dec a) (- b))), or ##Inf if the denominator evaluates to 0.

generic rising-factorial.

Returns the [rising
  factorial](https://en.wikipedia.org/wiki/Falling_and_rising_factorials), of
  `a` to the `b`, defined as the polynomial

  $$(a)^b = a^{\overline{b}} = a(a + 1)(a + 2) \cdots (a + b - 1)$$

  Given a negative `b`, `([[rising-factorial]] a b)` is equivalent
  to `(invert ([[falling-factorial]] (dec a) (- b)))`, or `##Inf` if the
  denominator evaluates to 0.
sourceraw docstring

stirling-first-kindclj/s

(stirling-first-kind n k & {:keys [unsigned?]})

Given n and k, returns the number of permutations of n elements which contain exactly k permutation cycles. This is called the Stirling number s(n, k) of the first kind.

By default, returns the signed Stirling number of the first kind. Pass the :unsigned? true keyword option to retrieve the signed Stirling number. (Or take the absolute value of the result...)

(stirling-first-kind 13 2)
;;=> -1486442880

(stirling-first-kind 13 2 :unsigned? true)
;;=> 1486442880
Given `n` and `k`, returns the number of permutations of `n` elements which
contain exactly `k` [permutation
cycles](https://mathworld.wolfram.com/PermutationCycle.html). This is called
the [Stirling number s(n, k) of the first
kind](https://en.wikipedia.org/wiki/Stirling_numbers_of_the_first_kind).

By default, returns the [signed Stirling number of the first
kind](https://en.wikipedia.org/wiki/Stirling_numbers_of_the_first_kind#Signs).
Pass the `:unsigned? true` keyword option to retrieve the signed Stirling
number. (Or take the absolute value of the result...)

```clj
(stirling-first-kind 13 2)
;;=> -1486442880

(stirling-first-kind 13 2 :unsigned? true)
;;=> 1486442880
```
sourceraw docstring

stirling-second-kindclj/s

(stirling-second-kind n k)

Returns $S(n,k)$, the number of ways to partition a set of n objects into k non-empty subsets.

This is called a Stirling number of the second kind.

Returns $S(n,k)$, the number of ways to partition a set of `n` objects into `k`
non-empty subsets.

This is called a [Stirling number of the second
kind](https://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind).
sourceraw docstring

subfactorialclj/s

(subfactorial n)

Returns the number of permutations of n objects in which no object appears in its original position. (Each of these permutations is called a 'derangement' of the set.)

References

Returns the number of permutations of `n` objects in which no object appears in
its original position. (Each of these permutations is called
a ['derangement'](https://en.wikipedia.org/wiki/Derangement) of the set.)

## References

- [Subfactorial page at Wolfram Mathworld](https://mathworld.wolfram.com/Subfactorial.html)
- John Cook, [Variations on Factorial](https://www.johndcook.com/blog/2010/09/21/variations-on-factorial/)
- John Cook, [Subfactorial](https://www.johndcook.com/blog/2010/04/06/subfactorial/)
- ['Derangement' on Wikipedia](https://en.wikipedia.org/wiki/Derangement)
sourceraw docstring

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close