「学习笔记」同余问题

一.基本概念

\(1.\) \(a|b\)\(a\) 能整除 \(b\),即 \(b \bmod a = 0\)

\(2.\) \(a\equiv b(\bmod m)\)\(a\)\(b\) 在模 \(m\) 的意义下同余,即 \(a\bmod m = b \bmod m\)

\(3.\) \(\varphi(n)\):欧拉函数,表示 \([1,n]\) 中与 \(n\) 互质的数的个数。


二.同余

  • 1.整除与同余的关系

    (1):\(a\equiv b(\bmod m)\) 当且仅当 \(m|(a-b)\)
    (2):\(a\equiv b(\bmod m)\) 当且仅当 \(a=b+k×m\)

  • 2.同余的性质

    对于整数 \(a,b,c\) 以及自然数 \(m,n\),有:

    (1)自反性:\(a\equiv a(\bmod m)\)
    (2)对称性:若 \(a\equiv b(\bmod m)\),那么 \(b\equiv a(\bmod m)\)
    (3)传递性:若 \(a\equiv b(\bmod m)\)\(b\equiv c(\bmod m)\),那么 \(a\equiv c(\bmod m)\)
    (4)同加性:若 \(a\equiv b(\bmod m)\),那么 \(a + c\equiv b + c(\bmod m)\)
    (5)同乘性:若 \(a\equiv b(\bmod m)\),那么 \(ac\equiv bc(\bmod m)\)
    (6)同幂性:若 \(a\equiv b(\bmod m)\),那么 \(a^n\equiv b^n(\bmod m)\)
    (7)若 \(a\equiv b(\bmod p)\)\(a\equiv b(\bmod q)\),那么 \(a\equiv b(\bmod pq)\)

  • 3.相关定理

    • 费马小定理:
      \(p\) 为质数,则对于任意整数 \(a\),有 \(a^p\equiv a(\bmod p)\)
    • 费马小定理的推论:
      \(p\) 为质数且 \(p\nmid a\) 时,\(a^{p-1}\equiv 1(\bmod p)\)
    • 欧拉定理:
      \(\gcd(a, n)=1\) 时,\(a^{\varphi(n)}\equiv 1(\bmod n)\)
    • 欧拉定理的推论:
      \(\gcd(a, n)=1\),则 \(a^b\equiv a^{b\bmod \varphi(n)}(\bmod n)\).

三.欧拉函数

(1) 设 \(n=p^k\),其中 \(n,k\) 为正整数,\(p\) 为质数,则有 \(\varphi (n)=p^k-p^{k-1}\)

(2) 设 \(n,m\) 为正整数,且 \(\gcd(n,m)=1\),则有 \(\varphi(nm)=\varphi(n)×\varphi(m)\)

(3) 设 \(N = \Pi _{i=1}^{n} p_i^{k_i}\),其中 \(p\) 为质数,那么 \(\varphi(N)=N×\Pi _{i=1}^{n}(1-\frac{1}{p_i})\)


四.扩展欧几里得算法

  • \(1\).前置算法:欧几里得算法。

  • \(2\).相关定理:
    裴蜀定理:对于任意整数 \(a,b\),存在一对整数 \(x,y\),满足 \(ax+by=\gcd(a,b)\)

    证明:当欧几里得算法到最后一步时,也就是 \(b=0\) 时,对于 \(ax+by=\gcd(a,b)\) 肯定有一组解 \(\begin{cases}x=1\\ y=0\end{cases}\)

    \(b>0\) 时,设上一个方程 \(bx+(a\bmod b)y = \gcd(b,a\bmod b)\) 的解为 \(\begin{cases}x=x'\\ y=y'\end{cases}\),那么方程可以变形为 \(bx'+ay'- \lfloor \frac{a}{b} \rfloor by'=ay'+b(x'-\lfloor \frac{a}{b} \rfloor y')=\gcd(a,b)\)

    那么此时,\(\begin{cases}x=y'\\ y=x'-\lfloor \frac{a}{b} \rfloor y'\end{cases}\) 就是一组解。

  • \(3\).算法介绍:与上文裴蜀定理的证明相似,我们可以利用欧几里得算法求出方程 \(ax+by=\gcd(x,y)\) 的解,这称为扩展欧几里得算法。


五.线性同余方程

  • \(1.\) 前置算法:扩展欧几里得算法。

  • \(2.\) 相关概念:
    同余方程:形如 \(ax\equiv c(\bmod b)\)\(a,b,c\) 为整数的方程。

  • \(3.\) 解法:
    对于 \(ax\equiv c(\bmod b)\),我们可以转化为 \(ax+by=c\)

    只考虑 \(c>\gcd(a,b)\) 的情况,设方程 \(ax+by=c'\) 有一组整数解 \(\begin{cases}x=x'\\ y=y'\end{cases}\)。如果 \(c'|c\),那么这个方程一定有一组解 \(\begin{cases}x=x' * \frac{c}{c'}\\ y=y' * \frac{c}{c'}\end{cases}\)

    根据裴蜀定理,我们可知 \(ax+by=\gcd(a,b)\) 一定有一组整数解。所以对于满足 \(\gcd(a,b)|c\) 时, \(ax\equiv c(\bmod b)\) 的一组整数解为 \(\begin{cases}x=x' * \frac{c}{\gcd(a,b)}\\ y=y' * \frac{c}{\gcd(a,b)}\end{cases}\).

    接下来继续探讨一下,当已知 \(ax\equiv c(\bmod b)\) 的一组解时,能否可以得出它的其它解?

    假设已知 \(x=x_0\),那么该方程在模 \(b\) 的意义下,一定有 \(\gcd(a,b)\) 个不同的解,其中 \(x_i=(x_0+i*\frac{b}{(\gcd(a,b))}) \bmod b\),证明略。

  • \(4.\) 例题讲解

    Ybtoj【例题1】同余方程

    P1082 [NOIP2012 提高组] 同余方程

    这是一道线性同余方程的模板题。

    可以直接用扩展欧几里得算法求出方程 \(ax\equiv 1(\bmod b)\) 的一个解。

    但是题目还要求找出最小正整数值,我们思考一下怎么求。

    因为题目保证有解,那么 \(\gcd(a,b)=1\),所以我们这个时候求出的解在模 \(b\) 的意义下是唯一的!

    但是最后要注意,有可能得到负数解,取模的时候要处理一下。

    核心代码如下:

    void exgcd (int a, int b, int &x, int &y) {
    	if (b == 0) {
    		x = 1;
    		y = 0;
    		return ;
    	}
    	exgcd (b, a % b, y, x);
    	y -= a / b * x;
    }
    
    cout << (x % b + b) % b;
    

六.乘法逆元

  • \(1.\) 相关概念:
    乘法逆元:若 \(b,p\) 互质,且 \(b|a\),则存在一个整数 \(x\) 使 \(\frac{a}{b} \equiv ax(\bmod p)\)。我们称 \(x\)\(b\) 在模 \(p\) 意义下的乘法逆元,记作 \(b^{-1}\)

  • \(2.\) 前置知识:费马小定理,线性同余方程。

  • \(3.\) 求法:根据 \(\frac{a}{b} \equiv ab^{-1}(\bmod p)\),可以得到 \(bb^{-1}\equiv 1(\bmod p)\)。先考虑一些特殊情况:当 \(p\) 为质数时,由费马小定理得: \(b^{p-1}\equiv 1(\bmod p)\),即 \(b×b^{p-2}\equiv 1 (\bmod p)\),此时可以得到 \(b^{-1}\equiv b^{p-2}(\bmod p)\)。于是我们得到特殊情况求逆元的方法。

    非特殊情况我们使用线性同余方程的知识解决即可。

  • \(4.\) 例题讲解:

    Ybtoj【例题2】约数之和

    \(A=p_1^{k_1}*p_2^{k_2}…*p_n^{k_n}\),其中 \(p\) 为质数,那么 \(A^B=p_1^{Bk_i}*p_2^{Bk_2}…*p_n^{Bk_n}\)

    已知 \(A^B\) 的约数和为 \(\Pi _{i=1}^{n}(\sum ^{Bk_{i}}_{j=0}p_{i}^j)\),根据等比数列求和公式可得 \(\Pi _{i=1}^{n}(\sum ^{Bk_{i}}_{j=0}p_{i}^j) = \Pi _{i=1}^{n}(\frac{p_i^{Bk_i+1}-1}{p_i-1})\),此时我们可以用快速幂求出分子的值。

    对于分母,因为 \(9901\) 为质数,所以当 \(p_i-1\)\(9901\) 互质时,直接求出 \(p_i-1\) 在模 \(9901\) 意义下的乘法逆元。当 \(p_i-1\)\(9901\) 不互质时,此时 \(\sum ^{Bk_{i}}_{j=0}p_{i}^j\) 的结果模 \(9901\) 后结果为 \(bk_i+1\)

    Ybtoj【例题3】线性求逆元

    P3811 【模板】乘法逆元

    假设已经求出 \([1,i-1]\) 的乘法逆元,设 \(p=\lfloor \frac{p}{i} \rfloor * i + r\),那么式子同时乘 \(i^{-1}r^{-1}\) ,可以得到 \(i^{-1}\equiv -r^{-1}*\lfloor \frac{p}{i}\rfloor (\bmod p)\),就可以做出来了。


七.中国剩余定理

  • \(1.\) 前置算法:扩展欧几里得算法。

  • \(2.\) 相关定理:
    (1) 中国剩余定理:若 \(m_1,m_2,……,m_n\) 满足两两互质,\(M=\Pi _{i=1}^{n}m_{i}\)\(M_i=\frac{M}{m_i}\)\(t_i\) 满足 \(t_i M_i \equiv 1(\bmod m_i)\)。对于任意的 \(n\) 个整数 \(a_1,a_2,……,a_n\),方程组 \(\begin{cases}x\equiv a1\left( \bmod m_{1}\right) \\ x\equiv a_{2}\left( \bmod m_{2}\right) \\……\\ x\equiv a_{n}\left (\bmod m_n\right) \end{cases}\) 必定有整数解,其中有一个解为 \(\sum ^{n}_{i=1} a_i M_i t_i\),且在模 \(M\) 的意义下有唯一解。

  • \(3.\) 例题讲解:

    Ybtoj【例题4】中国剩余定理

    P1495 【模板】中国剩余定理(CRT)/曹冲养猪

    根据上文写到的公式,求出答案即可。

posted @ 2022-01-25 09:38  cyhyyds  阅读(293)  评论(0编辑  收藏  举报