需要帮助mod 1000000007

时间:2012-02-09 23:12:56

标签: c++

我遇到了一个需要计算类似问题的问题:

((500!)/(20!x20!x20!x20!...))mod 1000000007

我理解如何计算500!%1000000007,但我不确定如何在分区中分配该运算符。

我目前正在尝试编写一个代码,通过分子的因子来取消分母。但我不确定这是否是一个很好的方法。

我只需要一种解决这类问题的数学方法(mod1000000007),因为它们经常在编程比赛中遇到,并会帮助我准备Google Code Jam。

1 个答案:

答案 0 :(得分:4)

方法1:

考虑一下如何正常计算500! / (20! * 20! * 20! * ...)

不要把所有东西都加倍,最后分开。你的分歧在中间。然后将其与前一个问题的模数减少结合起来。

方法2:

Prime factorize 500!20!。然后从20! * 20! * 20!的素因子中减去500!(或者你有多少)的素因子。

然后通过将剩余因子相乘来重建数字。 (同时沿着模数采取模数以防止数量变大)

方法3:

如果1000000007(或任何模数)为素数,则可以使用modular inverse进行除法。

计算20! mod 1000000007。然后计算它的模逆,并将其乘以500! mod 1000000007