除法直接取模

发布时间 2023-07-06 23:29:24作者: PlanariaIce

关于除法直接取模

在计算 \(\dfrac{a}{b} \bmod m\) 时,常规方法是利用乘法逆元。

但在一些特殊情况下,我们可以直接计算

\[\dfrac{a \bmod m}{b \bmod m} \bmod m \]


证明:\(\gcd(a, m) = \gcd(b, m) = 1\) 时,有:

\[\dfrac{a}{b} \equiv \dfrac{a \bmod m}{b \bmod m} \pmod m \]

使用逆元化成等价形式:

\[ab^{-1} \equiv (a \bmod m)(b \bmod m)^{-1} \pmod m \]

其中 \(b^{-1}\)\(b\) 在模 \(m\) 意义下的乘法逆元, \((b \bmod m)^{-1}\) 同理。

\[(a \bmod m)b^{-1} \equiv (a \bmod m \bmod m)(b \bmod m)^{-1} \pmod m \]

因为 \(a \bmod m = a \bmod m \bmod m\),所以:

\[(a \bmod m)b^{-1} \equiv (a \bmod m)(b \bmod m)^{-1} \implies ab^{-1} \equiv a(b \bmod m)^{-1} \]

因为 \(\gcd(a,m)=1\),所以上式可以化为:

\[b^{-1} \equiv (b \bmod m)^{-1} \pmod m \]

该式与最开始要证明的式子等价,所以我们只要证明它即可。

下面我们使用推导扩展欧几里得算法的方法来证明。

\(x_1=b^{-1}, x_2=(b \bmod m)^{-1}\),根据逆元的定义,有:

\[bx_1 \equiv 1 \pmod m \]

\[(b \bmod m)x_2 \equiv 1 \pmod m \]

因为 \(\gcd(b, m)=1\),根据

\[\gcd(a,b) = \gcd(b, a \bmod b) \]

可得

\[\gcd(b, m) = \gcd(b \bmod m, m) = 1 \]

由裴蜀定理得:

\[bx_1 + my_1 = 1 \]

\[(b \bmod m)x_2 + my_2 = 1 \]

联立两式:

\[bx_1 + my_1 = (b \bmod m)x_2 + my_2 \]

注意到 \(a \bmod b = a - (b \times \lfloor \frac{a}{b} \rfloor)\),所以式子可变化为:

\[bx_1 + my_1 = bx_2 + m(y_2 - x_2 \times \lfloor \frac{b}{m} \rfloor) \]

观察得出

\[x_1 = x_2 \]

故有:

\[b^{-1} \equiv (b \bmod m)^{-1} \pmod m \]

得证。

受限于个人能力,也许过程繁琐甚至存在错误,欢迎大家指正。