我有两个大数字(< 10 ^ 9)n
和m
。我必须计算[(n-1+m)!]/[(n-1)!*m!]
如果答案太大,我必须从(10^9+7)
得到模数。 (例如:如果n太大,则为n%mod)。
int mod = 1000000000+7;
我计算如下。 (我分别计算了上半部分和下半部分)
long up=1;
for (long i = a+b-1; i>=Math.max(a, b); i--) {
up*=i%mod;
}
up=up%mod;
long down=1;
for (long i = Math.min(a, b); i>0; i--) {
down*=i%mod;
}
然后将答案打印为
System.out.println((up%mod/down%mod)%mod);
这种方法是否正确。它会给出正确的输出。
我知道(a*b*c)%d == [(a%d)*(b%d)*(c%d)]%d
(如果我错了,请纠正我)
有没有这样的方法来计算[a/b]%d
?
答案 0 :(得分:1)
(a/b) % c != ((a%c) / (b%c) % c)
而是使用递归公式binomial coefficient来计算模数
(n, k) = (n - 1, k - 1) + (n - 1, k)
在你的情况下,它将是
(n - 1 + m, m) % MOD = ((n - 2 + m, m - 1) % MOD + (n - 2 + m, m) % MOD) % MOD
使用上面的递归来获得结果。