Saatnya untuk tantangan mudah lainnya di mana semua dapat berpartisipasi!
Teorema multinomial menyatakan:
Ekspresi dalam tanda kurung adalah koefisien multinomial, didefinisikan sebagai:
Mengizinkan istilah k i untuk menjangkau semua partisi integer dari n memberikan level ke- n dari m -simplex Pascal . Tugas Anda adalah menghitung koefisien ini.
Tugas
Tulis program atau fungsi yang mengambil angka m , n , k 1 , k 2 , ..., k m-1 , dan menghasilkan atau mengembalikan koefisien multinomial yang sesuai. Program Anda secara opsional dapat menganggap m sebagai argumen tambahan jika perlu. Perhatikan bahwa k m tidak ada dalam input.
Angka-angka ini dapat dimasukkan dalam format apa pun yang disukai, misalnya dikelompokkan ke dalam daftar atau disandikan di unary, atau apa pun, selama perhitungan aktual dari koefisien multinomial dilakukan oleh kode Anda, dan bukan proses pengkodean.
Format output juga fleksibel.
Semua kode harus berjalan dalam waktu kurang dari satu menit untuk n dan m hingga 1000.
Jangan khawatir tentang integer overflow.
Built-in yang dirancang untuk menghitung koefisien multinomial tidak diperbolehkan.
Celah standar berlaku.
Mencetak gol
Ini adalah kode golf: Solusi terpendek dalam byte yang menang.
Uji kasus
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}]
sama sekali, karena eksponen jauh melampaui apa yang bisa diwakili oleh float 64-bit. (Pelampung 128-bit mungkin sudah cukup, tapi saya berasumsi Anda ingin menggunakan jenis nomor asli JavaScript?)
1934550571913396675776550070308250
, bisakah kita menghasilkan1.9345505719133966e+33
?