¡Es hora de otro desafío fácil en el que todos puedan participar!
El teorema multinomial establece:
La expresión entre paréntesis es el coeficiente multinomial, definido como:
Permitir que los términos k i a la gama de más de todas las particiones de enteros de n da la n -ésima nivel de de Pascal m -simplex. Su tarea es calcular este coeficiente.
Tarea
Escriba un programa o función que tome m números, n , k 1 , k 2 , ..., k m-1 , y genere o devuelva el coeficiente multinomial correspondiente. Su programa puede tomar opcionalmente m como argumento adicional si es necesario. Tenga en cuenta que k m no está en la entrada.
Estos números pueden ingresarse en cualquier formato que le guste, por ejemplo, agrupados en listas o codificados en unario, o cualquier otra cosa, siempre que su código realice el cálculo real del coeficiente multinomial, y no el proceso de codificación.
El formato de salida es igualmente flexible.
Todo el código debe ejecutarse en menos de un minuto para n y m hasta 1000.
No te preocupes por el desbordamiento de enteros.
No están permitidos los elementos integrados diseñados para calcular el coeficiente multinomial.
Se aplican lagunas estándar.
Tanteo
Este es el código de golf: la solución más corta en bytes gana.
Casos de prueba
Input: 3, [2, 0]
Output: 3
Input: 3, [1, 1]
Output: 6
Input: 11, [1, 4, 4]
Output: 34650
Input: 4, [1,2]
Output: 12
Input: 15, [5,4,3,2]
Output: 37837800
Input: 95, [65,4,4]
Output: 1934550571913396675776550070308250
Input: 32, [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
Output: 4015057936610313875842560000000
Input: 15, [3,3,3,3]
Output: 168168000
Input: 1000, [10,10,10,10,10,10,10,10,10,10,100,100,100,100,100,100,100,100]
Output: 1892260836114766064839886173072628322819837473493540916521650371620708316292211493005889278395285403318471457333959691477413845818795311980925098433545057962732816261282589926581281484274178579110373517415585990780259179555579119249444675675971136703240347768185200859583936041679096016595989605569764359198616300820217344233610087468418992008471158382363562679752612394898708988062100932765563185864346460326847538659268068471585720069159997090290904151003744735224635733011050421493330583941651019570222984959183118891461330718594645532241449810403071583062752945668937388999711726969103987467123014208575736645381474142475995771446030088717454857668814925642941036383273459178373839445456712918381796599882439216894107889251444932486362309407245949950539480089149687317762667940531452670088934094510294534762190299611806466111882595667632800995865129329156425174586491525505695534290243513946995156554997365435062121633281021210807821617604582625046557789259061566742237246102255343862644466345335421894369143319723958653232683916869615649006682399919540931573841920000000000000
Input: 33, [17]
Output: 1166803110
Input: 55, [28]
Output: 3824345300380220
[1000 {999 ones}]
en absoluto, porque el exponente está mucho más allá de lo que pueden representar las flotantes de 64 bits. (Los flotantes de 128 bits probablemente serán suficientes, pero supongo que desea usar el tipo de número nativo de JavaScript?)
1934550571913396675776550070308250
, ¿podemos dar salida1.9345505719133966e+33
?