取模

定义

对于 $a,b\in\mathbb{Z}$,满足 $b>0$,则存在唯一的整数 $q,r$,满足 $a=b\times q+r\,(0\le r

称 $q$ 为商、$r$ 为余数。余数用 $a\bmod b$ 表示,在 $\text{C++}$ 中表示为 a % b

性质

  • $(a+b)\bmod m=(a\bmod m+b\bmod m)\bmod m$。

  • $(a-b)\bmod m=(a\bmod m-b\bmod m)\bmod m$。

    需要注意的是,$a\bmod m$ 可能小于 $b\bmod m$,那么结果在 $\text{C++}$ 中计算的结果将是负数。

    但是在数学中,负数取模的结果仍然是非负数,故在 $\text{C++}$ 中一般将其写作 (a % m - b % m + m) % m

  • $(a\times b)\bmod m=(a\bmod m\times b\bmod m)\bmod m$。

PS:注意,$(a\div b)\bmod m=\big((a\bmod m)\div(b\bmod m)\big)\bmod m$ 这个等式不一定成立!

反例:$a=12,b=3,m=6$,$(a\div b)\bmod m=4$,而
$$ \begin{aligned} \big((a\bmod m)\div(b\bmod m)\big)\bmod m&=(0\div 3)\bmod 6\\ &=0 \end{aligned} $$
$0\not=4$,故上述等式不一定成立。


如果想在模意义下实现除法,请参见 乘法逆元

同余

定义

若 $x,y\in\mathbb{Z}$ 除以 $m$ 的余数相同,则称 $x,y$ 模 $m$ 同余,记为 $x\equiv y\pmod m$。

性质

  • 反身性:$x\equiv x\pmod m$。
  • 对称性:$x\equiv y\pmod m$,则 $y\equiv x\pmod m$。
  • 传递性:如果 $x\equiv y\pmod m$,$y\equiv z\pmod m$,则 $x\equiv z\pmod m$。
  • 同加减性:如果 $x\equiv y\pmod m$,则 $x\pm z\equiv y\pm z\pmod m$。
  • 同乘性:如果 $x\equiv y\pmod m$,则 $x\times z\equiv y\times z\pmod m$。
  • 同幂性:如果 $x\equiv y\pmod m$,则 $x^z\equiv y^z\pmod m$。

此外,还有一个十分重要的性质:
$$ x\equiv y\pmod m \Leftrightarrow m\mid (x-y) $$