【问题标题】:How to calculate "modular multiplicative inverse" when the denominator is not co-prime with m?当分母与m不互质时如何计算“模乘逆”?
【发布时间】:2010-12-04 01:17:20
【问题描述】:

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

我要做的是计算 (a mod m) * (x mod m),其中 x 是 b 的 modular inverse .

我尝试使用Extended Euclidean algorithm,但是当 b 和 m 不是互质数时该怎么办? 具体是mentioned,b 和 m 需要互质。

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

我该怎么办?算法可以修改吗?

【问题讨论】:

    标签: numbers modulo largenumber


    【解决方案1】:

    是的,你有麻烦了。如果 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)。

    【讨论】:

    • 我不确定你的意思。如果 a 可以被 gcd(b,m) 整除,那么你可以解决它。否则,甚至没有定义除法操作。您需要找出另一种方法来实现您的最终目标,而无需模块化划分。
    • 我的意思是,“在没有模块化划分的情况下实现我的最终目标”的其他方法是什么?
    • @eSKay 你的问题没有意义。你的最终目标是什么?
    • 你为什么要做模块化划分?我认为您正在尝试使用模块化除法作为子程序来执行某些任务(也称为最终目标)。那是什么任务?我认为无论它是什么,模块化划分可能都不是答案。
    • @Keith Randall 是的,你是对的。我要做的是计算一系列形式为 1+x+x^2+x^3+...+x^n % m 的 mod。我提到了 a/b 形式,因为我尝试使用几何和公式。迭代整个系列 id 不是一个选项,因为 n 非常大(~10^17)
    【解决方案2】:

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

    3 * x mod 12

    可以认为是一个复合问题,涉及

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2021-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多