找到一个/ b mod c

时间:2010-08-20 12:03:23

标签: math

我知道这可能看起来像是一个数学问题,但我只是在比赛中看到了这一点,我真的想知道如何解决它。

我们有

  

a(mod c)

  

b(mod c)

我们正在寻找商数值

  

(a / b)(mod c)

有什么想法吗?

3 个答案:

答案 0 :(得分:18)

在模C的整数环中,这些等式是等价的:

  

A / B (mod C)
  A * (1/B) (mod C)
  A * B -1 (mod C)

因此,您需要找到B -1 BC的乘法逆。您可以使用例如扩展欧几里德算法。

请注意,并非每个数字都具有给定模数的乘法反转。

具体而言,B -1 存在且仅当gcd(B, C) = 1(即BC是互质的时候)。

另见


模数乘法逆:示例

假设我们想要找到3模11的乘法逆。

也就是说,我们想找到

  

x = 3 -1 (mod 11)
  x = 1/3 (mod 11)
  3x = 1 (mod 11)

使用扩展的欧几里得算法,你会发现:

  

x = 4 (mod 11)

因此,3模11的模乘法逆是4.换句话说:

  

A / 3 == A * 4 (mod 11)


朴素算法:暴力搜索

解决此问题的一种方法:

  

3x = 1 (mod 11)

只需针对所有值x尝试0..11,并查看等式是否成立。对于小模数,这个算法可能是可以接受的,但扩展欧几里德算法渐近更好。

答案 1 :(得分:-1)

可能有很多答案。当你拥有的是k = B mod C时,B可以是所有整数N的任何k + CN。

这意味着B可能非常大。事实上,如此大,使A / B接近零。

但是,这只是一种回应方式。

答案 2 :(得分:-4)

我认为它可以写成(但不确定)

(a/b)%c = ((a)%(b*c))/b