2012-02-09 32 views
-2

我被困在其中,我需要计算类似的问题:在国防部需要帮助1000000007

(!!(500)/(20×20×20×20 ...)!)MOD 1000000007

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

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

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

+1

'(x/y)mod z'甚至意味着什么?它是:“找到一个数字,如果乘以'y',将等于(mod'z')到'x'?” – 2012-02-09 23:21:35

+0

http://stackoverflow.com/questions/9169167/need-help-in-mod-1000000007-questions – nikhil 2012-07-02 14:36:23

回答

4

方法1:

想想你将如何计算500!/(20! * 20! * 20! * ...)正常。

不要把所有东西放在一起并在最后分开。在中间做你的部门。然后将其与上一个问题的模量降低结合起来。

方法2:

Prime factorize500!20!。然后从500!的素数中扣除20! * 20! * 20!(或其中多数人)的素数因子。

然后通过将其余的因子相乘来重建数字。 (同时服用模量一路保持数越来越大)

方法3:

如果1000000007(或任何模量)为素数,则可以使用modular inverse师做。

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

+0

非常感谢。 Method3有很多帮助。你能不能为我提出一本好书来提高我的数学技能,这对于编程而言是必不可少的,否则难以解决。 – daerty0153 2012-02-09 23:30:39

+1

我不看书。我使用谷歌和维基百科。你偶然发现的这个数学题目叫做“数论”。但这是一个非常大的话题,没有一本书可以涵盖。您也可以尝试搜索“模块化算术”。 – Mysticial 2012-02-09 23:33:25