【问题标题】:Need help in mod 1000000007 [closed]在mod 1000000007中需要帮助[关闭]
【发布时间】:2012-02-09 23:12:56
【问题描述】:

我遇到了一个问题,我需要计算以下内容:

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

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

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

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

【问题讨论】:

标签: c++


【解决方案1】:

方法一:

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

不要将所有内容相乘并在最后进行除法。在中间做你的部门。然后将其与上一个问题中的模数减少结合起来。

方法二:

Prime factorize500!20!。然后从500! 的主要因数中减去20! * 20! * 20! 的主要因数(或者你有多少个)。

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

方法三:

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

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

【讨论】:

  • 非常感谢。 Method3 有很大帮助。你能不能给我推荐一本好书来提高我的数学技能,这对编程来说是必不可少的,否则很难解决。
  • 我不读书。我使用谷歌和维基百科。您偶然发现的这个数学主题称为“数论”。但这是一个非常大的话题,任何一本书都无法涵盖。您也可以尝试搜索“模数运算”。
猜你喜欢
  • 1970-01-01
  • 2012-08-25
  • 2011-09-15
  • 2021-11-12
  • 2014-09-22
  • 2014-08-31
  • 2018-02-15
  • 2012-07-12
  • 1970-01-01
相关资源
最近更新 更多