2012-02-09 33 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