【发布时间】:2020-09-15 14:52:26
【问题描述】:
我一直在努力解决这个问题:
求二项式系数C(n, m) = n! / (m! (n - m)!)模10^9 + 7的Euler's totient function,m <= n < 2 * 10^5。
我的一个想法是,首先,我们可以在线性时间内预先计算从 1 到 n 的所有 i 的 phi(i) 的值,我们还可以计算从 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,所以我们可以在线性时间内以10^9 + 7 为模计算phi(x!)。但是,在最后一步,我们需要计算phi(n! / ((m! (n - m)!),(如果我们已经知道阶乘的函数),所以,如果我们使用这种方法,我们必须知道gcd(C(n, m), m! (n - m)!),我不知道如何找到它。
我也一直在考虑分解二项式系数,但似乎没有有效的方法来做到这一点。
任何帮助将不胜感激。
【问题讨论】:
-
T(n,m) = T(n-1,m-1)+T(n-1,m) 是查找二项式系数的递归关系..现在我认为你可以进步从这里..
-
@aravind 是的,但是你如何用 phi(x), phi(y) 来表示 phi(x + y)?
标签: c++ algorithm binomial-coefficients