跳转至

同余

基本定义 \(a\ \%\ m=b\ \%\ m\),同余式为 \(a\equiv{b}\pmod{m}\)

基本定理

  1. \(a\equiv{b}\pmod{m}\),当且仅当 \(m\ |\ (a-b)\)
  2. \(a\equiv{b}\pmod{m}\),当且仅当存在整数 \(k\),使得 \(a=b+k\cdot{m}\)
  3. 同余关系是等价关系

    自反:\(a\equiv{a}\pmod{m}\)

    对称性:\(a\equiv{b}\pmod{m}\),则 \(b\equiv{a}\pmod{m}\)

    传递性:\(a\equiv{b}\pmod{m},b\equiv{c}\pmod{m}\),则 \(a\equiv{c}\pmod{m}\)

  4. \(a\equiv{b}\pmod{m},c\equiv{d}\pmod{m}\),则

    \(a*x+c*y\equiv b*x+d*y\pmod m\)

    \(a*c\equiv b*d\pmod m\)

    \(a^n\equiv b^n\pmod m\)

    \(f(a)\equiv f(b)\pmod m\)

结论

(1)对任意整数 \(n\) , \(n^2\)\(3\)\(4\) 的结果只能是 \(0\)\(1\)

(2)对任意整数 \(n\) , \(n^2\)\(8\) 的结果只能是\(0\)\(1\)\(4\)

(3)对任意整数 \(n\) , \(n\)\(n\) 各数位上的数字之和模 \(9\) 同余

扩展欧几里得算法

模版
C++
template<class T> T Exgcd(const T a, const T b, T &x, T &y) {
    if (b == 0) {
        x = 1;
        y = 0;
        return a;
    }
    T d = Exgcd(b, a % b, y, x);
    y -= a / b * x;
    return d;
}

线性同余方程

\(a*x\equiv b\pmod n\)

\[ \begin{gather} a\cdot{x}\equiv{b}\pmod{n}\\ x\equiv{b}\cdot{a}^{-1}\pmod{n} \nonumber \end{gather} \]

\(a\) 在模 \(n\) 下有逆元时, 有解。

\(\gcd(a,n)=1\) 时,一定存在逆元。否则令 \(g=\gcd(a,n)\)

\(g\ |\ b\) 时,方程可以化简为

\[ \begin{gather} \dfrac{a}{g}*x_0\equiv\dfrac{b}{g}\pmod{\dfrac{n}{g}}\\ x_0=\dfrac{b}{g}*{(\dfrac{a}{g})}^{-1}\pmod{\dfrac{n}{g}}\\ x_1=(x_0+k*\dfrac{n}{g})\pmod n \nonumber \end{gather} \]
\[ \begin{gather} a\cdot{x}\equiv{b}\pmod{n}\\ a\cdot{x}+n\cdot{y}=b\pmod{n} \nonumber \end{gather} \]

使用扩展欧几里得算法可以解出 \(x_0,y_0\)

\[ \begin{gather} a\cdot{x}_0+n\cdot{y}_0=\gcd(a,n)\\ a\cdot\dfrac{x_0}{\gcd(a,n)}+n\cdot\dfrac{y_0}{\gcd(a,n)}=1\\ a\cdot\dfrac{x_0\cdot{b}}{\gcd(a,n)}+n\cdot\dfrac{y_0\cdot{b}}{\gcd(a,n)}=b\\ x_1=\frac{x_0\cdot{b}}{\gcd(a,n)}\\ y_1=\frac{y_0\cdot{b}}{\gcd(a,n)}\\ x=x_1+k\cdot\frac{n}{\gcd(a,n)}\\ y=y_1-k\cdot\frac{a}{\gcd(a,n)} \end{gather} \]