模运算符和除运算符

时间:2014-03-15 07:15:44

标签: algorithm math modulo

给我们的两个数字A和B.

给出A可以被B整除。

我需要计算(A/B)%MOD.

我们只知道两件事A%MOD, B。我们如何从以上两点来计算这一点。

真正的问题

num = (1*2*3.....*262143)%MOD,我们知道。

现在,我的任务是计算(2*3*4*...*262144)%MOD,然后计算(3*4*5*....*262145)%MOD,依此类推。

其中,MOD = 1000000009

更新: -

A = (2*3*4)%7 = ( 2%7 * 3%7 * 4%7)%7 = 3
B = ( (A*(5%7))%7 )/(2%7) = 0 .......................**THAT IS WRONG, ANSWER SHOULD BE 4**

2 个答案:

答案 0 :(得分:3)

由于1000000009是素数,因此问题很简单。您需要使用modular multiplicative inverses

(A / B) % MOD = ((A % MOD) * (B^-1 % MOD)) % MOD

您可以使用Fermat's little theorem来表示,如果p是素数,那么

a^(p - 1) % p = 1, 

导致

(a * a^(p - 2)) % p = 1, 

意思

a^(p - 2)

a mod p的模块化反转。

A = (2 * 3 * 4 * ... * 262144) % MOD
B = (3 * 4 * 5 * ... * 262145) % MOD
  = (A * (2^1000000007 % MOD) * (262145 % MOD)) % MOD

答案 1 :(得分:-1)

  

(x * y) % mod = (x % mod) * (y % mod)

鉴于此身份,您可以轻松找到答案:

  

A =(1 * 2 * 3 ..... * 262143)%MOD =(1%MOD * 2%MOD * 3 ..... * 262143%MOD)

     

B =(2 * 3 ..... * 262144)%MOD =(2%MOD * 3 ..... * 262144%MOD)

     

B = A *(262144%MOD)=(A * 262144)%MOD。