Skip to content

Commit b0cb90a

Browse files
committed
make multinomial work for iterable input
1 parent 912d506 commit b0cb90a

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

src/factorials.jl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,16 +93,18 @@ function primorial(n::Integer)
9393
end
9494

9595
"""
96-
multinomial(k...)
96+
multinomial(k)
97+
multinomial(k::Integer...)
9798
98-
Multinomial coefficient where `n = sum(k)`.
99+
Multinomial coefficient ```(n, (k[1], k[2], … ))``` with `n = sum(k)`.
99100
"""
100-
function multinomial(k...)
101-
s = 0
102-
result = 1
101+
function multinomial(k)
102+
s = zero(eltype(k))
103+
result = one(eltype(k))
103104
@inbounds for i in k
104105
s += i
105106
result *= binomial(s, i)
106107
end
107108
result
108109
end
110+
multinomial(k::T...) where T<:Integer = multinomial(k)

test/factorials.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333

3434
# multinomial
3535
@test multinomial(1, 4, 4, 2) == 34650
36+
@test multinomial([1, 4, 4, 2]) == multinomial(1, 4, 4, 2)
37+
@test @inferred multinomial(big"1", big"4") isa BigInt
3638

3739
# primorial
3840
@test primorial(17) == 510510

0 commit comments

Comments
 (0)