Hora de outro desafio fácil, no qual todos podem participar!
A expressão entre parênteses é o coeficiente multinomial, definido como:
Permitindo que os termos de k i a variar ao longo de todas as partições inteiros de n dá o n -simo nível de de Pascal m -simplex. Sua tarefa é calcular esse coeficiente.
Tarefa
Escreva um programa ou função que pegue m números, n , k 1 , k 2 , ..., k m-1 e produz ou retorne o coeficiente multinomial correspondente. Seu programa pode opcionalmente considerar m como argumento adicional, se necessário. Observe que k m não está na entrada.
Esses números podem ser inseridos em qualquer formato que você queira, por exemplo, agrupado em listas ou codificado em unário ou qualquer outra coisa, desde que a computação real do coeficiente multinomial seja realizada pelo seu código, e não pelo processo de codificação.
O formato de saída é igualmente flexível.
Todo o código deve ser executado em menos de um minuto para n e m até 1000.
Não se preocupe com o excesso de números inteiros.
Built-ins projetados para calcular o coeficiente multinomial não são permitidos.
Aplicam-se brechas padrão.
Pontuação
Este é o código golf: A solução mais curta em bytes vence.
Casos de teste
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}]
, porque o expoente está muito além do que os flutuadores de 64 bits podem representar. (Bóias de 128 bits provavelmente será suficiente, mas eu estou supondo que você quer usar tipo de número nativo do JavaScript?)
1934550571913396675776550070308250
, podemos produzir1.9345505719133966e+33
?