Я пытался решить эту проблему:
Найти тотальную функцию Эйлера биномиальный коэффициент 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)!)
, и я не знаю, как чтобы найти его.
Я тоже думал о факторизации биномиального коэффициента, но, похоже, нет эффективного способа сделать это.
Любая помощь будет принята с благодарностью.