scipy.special.factorialk#
- scipy.special.factorialk(n, k, exact=None)[source]#
Multifactorial of n of order k, n(!!…!).
This is the multifactorial of n skipping k values. For example,
factorialk(17, 4) = 17!!!! = 17 * 13 * 9 * 5 * 1
In particular, for any integer
n
, we havefactorialk(n, 1) = factorial(n)
factorialk(n, 2) = factorial2(n)
- Parameters:
- nint or array_like
Calculate multifactorial. If
n < 0
, the return value is 0.- kint
Order of multifactorial.
- exactbool, optional
If exact is set to True, calculate the answer exactly using integer arithmetic, otherwise use an approximation (faster, but yields floats instead of integers)
Warning
The default value for
exact
will be changed toFalse
in SciPy 1.15.0.
- Returns:
- valint
Multifactorial of n.
Notes
While less straight-forward than for the double-factorial, it’s possible to calculate a general approximation formula of n!(k) by studying
n
for a given remainderr < k
(thusn = m * k + r
, resp.r = n % k
), which can be put together into something valid for all integer valuesn >= 0
&k > 0
:n!(k) = k ** ((n - r)/k) * gamma(n/k + 1) / gamma(r/k + 1) * max(r, 1)
This is the basis of the approximation when
exact=False
. Compare also [1].References
[1]Complex extension to multifactorial https://en.wikipedia.org/wiki/Double_factorial#Alternative_extension_of_the_multifactorial
Examples
>>> from scipy.special import factorialk >>> factorialk(5, k=1, exact=True) 120 >>> factorialk(5, k=3, exact=True) 10 >>> factorialk([5, 7, 9], k=3, exact=True) array([ 10, 28, 162]) >>> factorialk([5, 7, 9], k=3, exact=False) array([ 10., 28., 162.])