* but not of any interest to the user of the library. */
/*
- * GiNaC Copyright (C) 1999-2016 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2018 Johannes Gutenberg University Mainz, Germany
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
return k;
}
+/** Compute the multinomial coefficient n!/(p1!*p2!*...*pk!) where
+ * n = p1+p2+...+pk, i.e. p is a partition of n.
+ */
+const numeric
+multinomial_coefficient(const std::vector<unsigned> & p)
+{
+ numeric n = 0, d = 1;
+ for (auto & it : p) {
+ n = n.add(numeric(it));
+ d = d.mul(factorial(numeric(it)));
+ }
+ return factorial(n).div(d);
+}
//////////
// flyweight chest of numbers is initialized here: