From b0cb90a716b705caaae18bfcc96a43932873b60c Mon Sep 17 00:00:00 2001 From: Thomas Christensen Date: Fri, 8 Nov 2024 14:40:11 +0100 Subject: [PATCH 1/2] make `multinomial` work for iterable input --- src/factorials.jl | 12 +++++++----- test/factorials.jl | 2 ++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/factorials.jl b/src/factorials.jl index b900267..5b76dee 100644 --- a/src/factorials.jl +++ b/src/factorials.jl @@ -93,16 +93,18 @@ function primorial(n::Integer) end """ - multinomial(k...) + multinomial(k) + multinomial(k::Integer...) -Multinomial coefficient where `n = sum(k)`. +Multinomial coefficient ```(n, (k[1], k[2], … ))``` with `n = sum(k)`. """ -function multinomial(k...) - s = 0 - result = 1 +function multinomial(k) + s = zero(eltype(k)) + result = one(eltype(k)) @inbounds for i in k s += i result *= binomial(s, i) end result end +multinomial(k::T...) where T<:Integer = multinomial(k) \ No newline at end of file diff --git a/test/factorials.jl b/test/factorials.jl index 846c089..dd613c8 100644 --- a/test/factorials.jl +++ b/test/factorials.jl @@ -33,6 +33,8 @@ # multinomial @test multinomial(1, 4, 4, 2) == 34650 + @test multinomial([1, 4, 4, 2]) == multinomial(1, 4, 4, 2) + @test @inferred multinomial(big"1", big"4") isa BigInt # primorial @test primorial(17) == 510510 From a67609ac7cb176f8de7bc7b8929871d4821da407 Mon Sep 17 00:00:00 2001 From: Thomas Christensen Date: Fri, 8 Nov 2024 15:04:52 +0100 Subject: [PATCH 2/2] fix test --- test/factorials.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/factorials.jl b/test/factorials.jl index dd613c8..6eb11a5 100644 --- a/test/factorials.jl +++ b/test/factorials.jl @@ -34,7 +34,7 @@ # multinomial @test multinomial(1, 4, 4, 2) == 34650 @test multinomial([1, 4, 4, 2]) == multinomial(1, 4, 4, 2) - @test @inferred multinomial(big"1", big"4") isa BigInt + @test (@inferred multinomial(big"1", big"4")) isa BigInt # primorial @test primorial(17) == 510510