当分母与m不共同时,如何计算“模乘法逆”?

时间:2009-10-05 18:53:35

标签: numbers modulo largenumber

我需要计算 (a/b) mod m ,其中 a b 是非常大的数字。

我要做的是计算 (a mod m) * (x mod m) ,其中 x {的modular inverse {1}}

我尝试使用Extended Euclidean algorithm,但是当b和m不是共同素数时该怎么办? 特别是mentioned b和m需要共同处理。

我尝试使用代码here,并意识到例如: 对于 b 的任何值, 3 * x mod 12 根本不可能,它不存在!

我该怎么办?算法可以以某种方式修改吗?

3 个答案:

答案 0 :(得分:6)

是的,你有麻烦了。如果b和m有一个公约数,x在b*x = 1 mod m中没有解。同样,在原始问题a/b = y mod m中,您正在寻找y a=by mod m。如果a可以被gcd(b,m)整除,那么您可以按该因子进行除法并求解y。如果没有,则没有y可以解决方程(即a/b mod m未定义)。

答案 1 :(得分:2)

b和m必须是互质的原因是因为中国剩余定理。基本上是问题:

3 * x mod 12

可以被认为是涉及

的复合问题

3*x mod 33*x mod 4 = 2^2

现在如果b不是12的互质,这就像试图除以零。因此答案不存在!

这是由抽象代数中的场论引起的。字段基本上是具有明确定义的加法,减法,乘法和除法的集合。有限域总是GF(p ^ n)形式,其中p是素数,n是正整数,操作是加法和乘法模p ^ n。现在,12不是主要力量,所以你的响铃不是一个字段。因此,对于任何与m无关的b,都不能解决这个问题。

答案 2 :(得分:1)

检查一下:http://www.math.harvard.edu/~sarah/magic/topics/division 它可能有所帮助。 它解释了模块划分的方法。