我被困在其中,我需要计算类似的问题:在国防部需要帮助1000000007
(!!(500)/(20×20×20×20 ...)!)MOD 1000000007
我明白如何计算500!%1000000007,但我不确定如何在分配中分配该运算符。
我目前正在尝试编写一个代码,以分子的因子取消分母。但我不确定这是否是一个好方法。
我只需要一种解决这些问题的数学方法(mod1000000007),因为它们在编程竞赛中经常遇到,并且会帮助我准备Google Code Jam。
我被困在其中,我需要计算类似的问题:在国防部需要帮助1000000007
(!!(500)/(20×20×20×20 ...)!)MOD 1000000007
我明白如何计算500!%1000000007,但我不确定如何在分配中分配该运算符。
我目前正在尝试编写一个代码,以分子的因子取消分母。但我不确定这是否是一个好方法。
我只需要一种解决这些问题的数学方法(mod1000000007),因为它们在编程竞赛中经常遇到,并且会帮助我准备Google Code Jam。
方法1:
想想你将如何计算500!/(20! * 20! * 20! * ...)
正常。
不要把所有东西放在一起并在最后分开。在中间做你的部门。然后将其与上一个问题的模量降低结合起来。
方法2:
Prime factorize500!
和20!
。然后从500!
的素数中扣除20! * 20! * 20!
(或其中多数人)的素数因子。
然后通过将其余的因子相乘来重建数字。 (同时服用模量一路保持数越来越大)
方法3:
如果1000000007
(或任何模量)为素数,则可以使用modular inverse师做。
计算20! mod 1000000007
。然后计算它的模逆,并将其乘以500! mod 1000000007
。
非常感谢。 Method3有很多帮助。你能不能为我提出一本好书来提高我的数学技能,这对于编程而言是必不可少的,否则难以解决。 – daerty0153 2012-02-09 23:30:39
我不看书。我使用谷歌和维基百科。你偶然发现的这个数学题目叫做“数论”。但这是一个非常大的话题,没有一本书可以涵盖。您也可以尝试搜索“模块化算术”。 – Mysticial 2012-02-09 23:33:25
'(x/y)mod z'甚至意味着什么?它是:“找到一个数字,如果乘以'y',将等于(mod'z')到'x'?” – 2012-02-09 23:21:35
http://stackoverflow.com/questions/9169167/need-help-in-mod-1000000007-questions – nikhil 2012-07-02 14:36:23