Я пытался решить эту проблему:
Найдите функцию Эйлера биномиального коэффициента C(n, m) = n! / (m! (n - m)!)
по модулю 10^9 + 7, m <= n < 2 * 10^5
.
Одна из моих идей заключалась в том, что, во-первых, мы можем предварительно вычислить значения phi(i)
для всех i от 1 до n за линейное время, а также мы можем вычислить все числа, обратные числам от 1 до n по модулю 10^9 + 7, используя, например, уравнение Ферма. маленькая теорема. После этого мы знаем, что, в общем, phi(m * n) = phi(m) * phi(n) * (d / fi(d)), d = gcd(m, n)
. Поскольку мы знаем, что gcd((x - 1)!, x) = 1, if x is prime, 2 if x = 4, and x in all other cases
, мы можем вычислить phi(x!)
по модулю 10^9 + 7 за линейное время. Однако на последнем шаге нам нужно вычислить phi(n! / ((m! (n - m)!)
(если мы уже знаем функцию для факториалов), поэтому, если мы используем этот метод, мы должны знать gcd(C(n, m), m! (n - m)!)
, и я не знаю, как его найти.
Я также думал о факторизации биномиального коэффициента, но, похоже, нет эффективного способа сделать это.
Любая помощь будет оценена по достоинству.