Они известны как многочленные коэффициенты, которые я обозначу m(a,b,...)
.
И вы можете эффективно рассчитать их, избегая переполнения, используя эту идентичность (что должно быть довольно просто доказать):
m(a,b,c,...) = m(a-1,b,c,...) + m(a,b-1,c,...) + m(a,b,c-1,...) + ...
m(0,0,0,...) = 1 // base case
m(anything negative) = 0 // base case 2
Тогда это простой вопрос использования рекурсии для вычисления коэффициентов. Обратите внимание, что во избежание экспоненциального времени выполнения вам необходимо либо кэшировать свои результаты (чтобы избежать повторного вычисления), либо использовать динамическое программирование.
Чтобы проверить переполнение, просто убедитесь, что суммы не переполнены.
И да, очень плохо использовать библиотеки произвольной точности для выполнения этой простой задачи.