我想有效地计算 ((X+Y)!/(X!Y!))% P (P 就像 10^9+7)
这个讨论给出了一些关于在除法上分配模数的见解。我担心的是,一个数字不一定总是存在模逆。基本上,我正在寻找解决问题的代码实现。
对于乘法,它非常简单:
public static int mod_mul(int Z,int X,int Y,int P)
{
// Z=(X+Y) the factorial we need to calculate, P is the prime
long result = 1;
while(Z>1)
{
result = (result*Z)%P
Z--;
}
return result;
}
我也意识到许多因素可以在除法中被取消(在取模之前),但如果除数的数量增加,那么我发现很难有效地提出一个除法算法。(循环遍历 List(factors(X)+factors(Y)...) 以查看哪个除以当前的分子乘数)。
编辑:我不想使用 BigInt 解决方案。
是否有任何基于 java/python 的解决方案或任何标准算法/库来取消因素(如果逆选项不是完全证明)或解决此类问题。