「算法笔记」基础数论

续:「算法笔记」基础数论 2

一、整除

对于两个整数 \(a,b\),存在两个唯一的整数 \(q,r\),使得 \(b=aq+r\),其中 \(0≤r<|a|\)。

特别地,若 \(r=0\),则我们称 \(a\) 整除 \(b\),记作 \(a\mid b\)。

对于两个正整数 \(a,b\),若 \(a \mid b\),则我们称 \(a\) 是 \(b\) 的约数。

我们称一个数是质数,当且仅当其质因子只有 \(1\) 以及其本身。特别地,\(1\) 不是质数。

二、几个结论

1. 素数有无穷多个。

证明:假设素数是有限的,并且数量为 \(k\),分别为 \(p_1,p_2,...,p_k\)。

考虑一个数 \(X=p_1×p_2×...×p_k+1\)。

易知 \(X\) 与 \(p_1,p_2,...,p_k\) 互质,则 \(X\) 必为素数,与素数只有有限的 \(k\) 个矛盾。

所以素数有无穷多个。

2. \(\lim\limits_{n\rightarrow\infty} \frac{\pi(n) \ln n}{n}=1\)  \(\pi(n)\):不大于 \(n\) 的质数个数。

3. \(n\) 和 \(2n\) 之间一定有质数。  4. \(P_n \sim \Theta (n\log n)\)

5. \(\sum\limits_{1\leq p \leq n,p是质数} \frac{1}{p} \sim \Theta(\log \log n)\)  6. \(\sum\limits_{i=1}^n \frac{1}{i} \sim \Theta (\log n)\)

三、公约数以及公倍数

1. 定义

对于 \(a,b\),若 \(d\mid a\)\(d\mid b\),则称 \(d\)\(a,b\) 的公约数。

对于其中最大的 \(d\),我们称之为 \(a, b\) 的最大公约数,记作 \(d = \gcd(a, b)\)\(d = (a, b)\)

类似地,若 \(a\mid d\)\(b\mid d\),则称 \(d\)\(a, b\) 的公倍数。

对于其中最大的 \(d\),我们称之为 \(a, b\) 的最小公倍数,记作 \(d = \text{lcm}(a, b)\)\(d = [a, b]\)

2. 引理

\(a\geq b\),则 \(\gcd(a,b)=\gcd(a-b,b)=\gcd(a\bmod b,b)\)

\(\gcd(a,b)\text{lcm}(a,b)=ab\)

证明:\(a=p_1^{\alpha_1}\times p_2^{\alpha_2} \times ... \times p_k^{\alpha_k}\)\(b=p_1^{\beta_1}\times p_2^{\beta_2} \times ... \times p_k^{\beta_k}\)

\(\gcd(a,b)=p_1^{\min(\alpha_1,\beta_1)}\times p_2^{\min(\alpha_2,\beta_2)}\times ... \times p_k^{\min(\alpha_k,\beta_k)}\)\(\text{lcm}=p_1^{\max(\alpha_1,\beta_1)}\times p_2^{\max(\alpha_2,\beta_2)}\times ... \times p_k^{\max(\alpha_k,\beta_k)}\)

\(\max(\alpha_i,\beta_i)+\min(\alpha_i,\beta_i)=\alpha_i+\beta_i\)

\(a\times b=p_1^{\alpha_1+\beta_1}\times p_2^{\alpha_2+\beta_2} \times\cdots\times p_k^{\alpha_k+\beta_k}\)
\(=p_1^{\min(\alpha_1,\beta_1)+\max(\alpha_1,\beta_1)} \times \cdots\times p_k^{\min(\alpha_k,\beta_k)+\max(\alpha_k,\beta_k)}\)
\(=\gcd(a,b)\times \text{lcm}(a,b)\)

故该命题成立。

3. 定理(裴蜀定理)

对于任意整数 \(a, b, m\),则存在整数 \(x, y\) 满足 \(ax + by = m\),当且仅当 \(\gcd(a, b) \mid m\)

证明:\(a, b\) 之一为 \(0\),结论显然成立。
若否,考虑 \(A = \{xa+yb \mid (x, y) \in \mathbb{Z}^2\}\) 中的最小正元素 \(d_0 = x_0a+y_0b\)(这一定存在)。考虑任意 \(p = x_1a + y_1b\in A\),设 \(p = qd_0 + r\),其中 \(0 ≤ r < d_0\),则 \(r = p-qd_0\in A\),故 \(r = 0\)。故 \(d_0\mid p\),则 \(d_0\mid a, b\)
然后,考虑任意 \(d\mid a, b\),若 \(a = kd\)\(b = ld\),则 \(d_0 = x_0a + y_0b = (x_0k + y_0l)d\),故 \(d\mid d_0\),故 \(d_0 = \gcd(a, b)\)。在方程中,若 \(m = m_0d_0\),则显然有无穷多组解。相反,若有解,则 \(|m| \in A\), 故 \(d_0\mid |m|\),即 \(d_0\mid m\)

4. 欧几里得算法

\(a\mid b\)\(b\mid c\)\(\gcd(a,b)=1\),则 \(ab\mid c\)

\(\forall a,b\in \mathbb{N}\)\(b\neq 0\)\(\gcd(a,b)=\gcd(b,a\bmod b)\)

int gcd(int x,int y){
    if(!y) return x;
    return gcd(y,x%y);
}
//时间复杂度:O(log(x+y)) 

扩展欧几里得算法:求解方程 \(ax+by=\gcd(a,b)\)

在欧几里得算法的最后一步,即 \(b=0\) 时,显然有一对整数 \(x=1,y=0\),使得 \(a\times 1+0\times 0=\gcd(a,0)\)

\(b>0\),则 \(\gcd(a,b)=\gcd(b,a \bmod b)\)。假设存在一对整数 \(x,y\),满足 \(b\times x+(a \bmod b)\times y=\gcd(b,a\bmod b)\),因为 \(bx+(a \bmod b)y=bx+(a-b\lfloor \frac{a}{b} \rfloor)y=ay+b(x-\lfloor \frac{a}{b} \rfloor y)\),所以令 \(x'=y\)\(y'=x-\lfloor \frac{a}{b} \rfloor y\),就得到了 \(ax'+by'=\gcd(a,b)\)

int exgcd(int a,int b,int &x,int &y){    //返回值为 a,b 的最大公约数 d
    if(!b) return x=1,y=0,a;
    int d=exgcd(b,a%b,x,y);
    int z=x; x=y,y=z-y*(a/b);
    return d;
} 

对于更为一般的方程 \(ax+by=c\),设 \(d=\gcd(a,b)\)。我们可以求出 \(ax+by=d\) 的一组特解 \(x_0,y_0\)。这所以 \(\frac{c}{d}\) 也必须为整数,否则无解(所以该方程有解当且仅当 \(d\mid c\))。我们令 \(x_0,y_0\) 同时乘上 \(\frac{c}{d}\),得 \(a\frac{cx_0}{d}+b\frac{cy_0}{d}=c\)。那么 \(x=\frac{c}{d}\cdot x_0,y=\frac{c}{d}\cdot y_0\) 即为一组解。

事实上,方程 \(ax+by=c\) 的通解可以表示为:

\(\displaystyle x=\frac{c}{d}x_0+k\frac{b}{d},\,y=\frac{c}{d}y_0-k\frac{a}{d}\,(k\in \mathbb{Z})\)

那么若求得一个 \(x\),则该方程 \(x\) 的最小整数解就是 (x%(b/d)+b/d)%(b/d)

四、整除的性质

1. 定理

\(a\mid bc\)\(\gcd(a, b) = 1\),则 \(a\mid c\)
\(a\mid  c\)\(b\mid  c\)\(\gcd(a, b) = 1\),则 \(ab\mid c\)

2. 引理 (欧几里得引理)

若质数 \(p\mid ab\) ,则不是 \(p\mid a\) ,就是 \(p\mid b\)

证明:\(p\mid a\) 则证毕。若 \(p\nmid a\) ,那么两者的最大公约数为 \(1\)。根据裴蜀定理,存在 \((m, n)\) 使得 \(ma + np = 1\)。于是 \(b = b(ma + np) = abm + bnp\)
由于 \(p\mid ab\) ,上式右边两项都可以被 \(p\) 整除。所以 \(p\mid b\)

五、算术基本定理

大于 \(1\) 的正整数 \(n\) 可以唯一分解成有限个质数的乘积。证明如下:

1. 存在性

假设存在大于 \(1\) 的自然数不能写成质数的乘积,并且最小的为 \(n\)

首先,按照定义,\(n\) 大于 \(1\)。其次,因为质数 \(p\) 可以写成质数乘积:\(p=p\),与假设矛盾,所以 \(n\) 不是质数。则 \(n\) 只能是合数。而每个合数都可以分解成两个小于自身而大于 \(1\) 的自然数的积。

设其中 \(a\)\(b\) 都是介于 \(1\)\(n\) 之间的自然数,因此,按照 \(n\) 的定义,\(a\)\(b\) 都可以写成质数的乘积。从而 \(n\) 也可以写成质数的乘积,与 \(n\) 的定义矛盾。因此大于 \(1\) 的自然数必可写成质数的乘积。

2. 唯一性

类似地,假设存在大于 \(1\) 的自然数可以用多于一种的方式写成多个质数的乘积,并且最小的为 \(n\)

首先,\(n\) 不是质数。将 \(n\) 用两种方法写出:\(n=p_1^{a_1}p_2^{a_2}...p_m^{a_m}=q_1^{b_1}q_2^{b_2}...q_n^{b_n}\)

根据欧几里得引理,因为 \(p_1 \mid q_1^{b_1}q_2^{b_2}...q_n^{b_n}\),所以 \(q_1^{b_1},q_2^{b_2},...,q_n^{b_n}\) 中有一个能被 \(p_1\) 整除,即 \(q_1,q_2,...,q_n\) 中有一个能被 \(p_1\) 整除。不妨设为 \(q_1\)\(q_1\) 也是质数,因此 \(q_1=p_1\)

假设 \(a_1>b_1\),则 \(p_1^{a_1-b_1}p_2^{a_2}...p_m^{a_m}=q_2^{b_2}...q_n^{b_n}\)

易得,\(q_2,q_3,...,q_n\) 有一个能被 \(p_1\) 整除,但 \(p_1=q_1\neq q_i \ (i\neq 1)\)。所以不能有 \(a_1>b_1\),同理,也不能有 \(a_1<b_1\),因此 \(a_1=b_1\)

两边相除得 \(n_0=p_2^{a_2}...p_m^{a_m}=q_2^{b_2}...q_n^{b_n}\),于是存在比 \(n\) 小的正整数,可以用多于一种的方式写成多个质数的乘积,与 \(n\) 的定义矛盾。因此唯一性得证。

六、同余

1. 定义

\(m \mid a-b\),则我们称 \(a\)\(b\) 在模 \(m\) 意义下同余,记作 \(a\equiv b \pmod{m}\)

2. 定理

\(a\equiv b \pmod m\)\(a\equiv b \pmod n\) 意味着 \(a\equiv b \pmod {\text{lcm}(n,m)}\)

证明:因为 \(a\equiv b \pmod m\),所以 \(m \mid a-b\)。同理可得 \(n \mid a-b\)。所以 \(\text{lcm}(n,m) \mid a-b\),则 \(a\equiv b \pmod {\text{lcm}(n,m)}\)

\(\gcd(k,m)=d\)\(ka\equiv kb \pmod m\),则 \(a \equiv b \pmod{\frac{m}{d}}\)

证明:因为 \(ka\equiv kb \pmod m\),所以 \(m \mid k(a-b)\)。设 \(m_0=\frac{m}{d}\)\(k_0=\frac{k}{d}\),则 \(m_0d\mid k_0d(a-b)\)。所以 \(m_0\mid k_0(a-b)\)

因为 \(\gcd(k,m)=d\),所以 \(\gcd(\frac{k}{d},\frac{m}{d})=1\),即 \(\gcd(m_0,k_0)=1\),因此 \(m_0 \mid a-b\)。则 \(a \equiv b \pmod {m_0}\),即 \(a \equiv b \pmod{\frac{m}{d}}\)

七、线性同余方程

给定整数 \(a,b,m\),求一个整数 \(x\) 满足 \(ax\equiv b \pmod m\),或给出无解。因为未知数的指数为 \(1\),所以我们称之为一次同余方程,也称线性同余方程。

\(ax\equiv b \pmod m\) 等价于 \(m \mid ax-b\),即 \(ax-b\)\(m\) 的倍数。不妨设为 \(-y\) 倍。于是,该方程可以改写为 \(ax+my=b\)

1. 定义

对于非负整数 \(a\) 以及 \(m\),如果存在 \(b\) 使得 \(ab\equiv 1 \pmod m\),则称 \(b\)\(a\) 在模 \(m\) 意义下的逆元,记作 \(a^{-1} \pmod m\)

2. 定理

定理 1:\(a^{-1} \pmod m\) 存在当且仅当 \(\gcd(a,m)=1\)

证明:存在 \(a^{-1} \pmod m\),即存在 \(x\) 使得 \(ax\equiv 1 \pmod m\),等价于存在 \(ax+my=1\)。根据裴蜀定理,存在整数 \(x,y\) 满足 \(ax+my=1\),当且仅当 \(\gcd(a,m)\mid 1\)。所以 \(\gcd(a,m)=1\)

定理 2:逆元如果存在,那么一定唯一。

证明:假如同时存在两个逆元。

\(ab\equiv 1 \pmod m\),则 \(m\mid ab-1\)\(ac\equiv 1 \pmod m\),则 \(m\mid ac-1\)。所以 \(m\mid a(b-c)\)

逆元存在当且仅当 \(\gcd(a,m)=1\),则 \(m\mid b-c\),即 \(b \equiv c \pmod m\)。“唯一”指在 \(\bmod m\) 意义下唯一。因此唯一性得证。

八、简化剩余系

1. 定义

任何 \(m\) 个分别属于 \(m\) 个剩余类(每个余数是一个剩余类)的数组成剩余系。

所有满足 \(0<n≤m\)\(\gcd(n,m)=1\)\(n\) 构成了一个模 \(m\) 的简化剩余系,记这样的 \(n\) 的个数为欧拉函数 \(\varphi(m)\)

换言之,对于正整数 \(n\) ,欧拉函数是小于或等于 \(n\) 的正整数中与 \(n\) 互质的数的数目。

2. 定理

\(\gcd(m,m')=1\)\(a\) 取遍 \(m\) 的简化剩余系,\(a'\) 取遍 \(m'\) 的简化剩余系,那么 \(am'+a'm\) 取遍模 \(mm'\) 的简化剩余系(用中国剩余定理证)。因此 \(\varphi(mm')=\varphi(m) \varphi(m')\)

\(\varphi(p^e)=p^e-p^{e-1}=(p-1)p^{e-1}\)。因此对于 \(n=p_1^{e_1} p_2^{e_2} ... p_k^{e_k}\)

\(\varphi(n)=\varphi(p_1^{e_1}) \varphi(p_2^{e_2})...\varphi(p_k^{e_k})\)
\(=\prod\limits_{i=1}^k \varphi(p_i^{e_i})=\prod\limits_{i=1}^k p_i^{e_i-1} (p_i-1)\)
\(=\prod\limits_{p\mid n}p^{\alpha_p-1}(p-1)=\prod\limits_{p\mid n} p^{\alpha_p} \frac{p-1}{p}\)
\(=\prod\limits_{p\mid n} p^{\alpha_p} \prod\limits_{p\mid n}\frac{p-1}{p}=n\prod\limits_{p\mid n}(1-\frac{1}{p})\)

其中 \(\alpha_p\) 表示 \(p\)\(n\) 中的幂次。

欧拉定理:\(\gcd(a,m)=1\),则 \(a^{\varphi(m)}\equiv 1 \pmod m\)

欧拉定理的推论:若 \(\gcd(a,m)=1\),则 \(a^b\equiv a^{b \bmod \varphi(m)} \pmod m\)。

费马小定理:\(m\) 为质数,且 \(\gcd(a,m)=1\),则 \(a^{m-1}\equiv 1 \pmod m\)

因为 \(m\) 为质数,所以满足 \(p\mid m\)\(p\) 只有一个。

\(\varphi(m)=m\prod\limits_{p\mid m}(1-\frac{1}{p})=m\times \frac{m-1}{m}=m-1\)

根据欧拉定理可得,\(a^{m-1}\equiv 1 \pmod m\)

九、求逆元

1. 如何求出 \(a\) 的逆元?

  • \(\gcd(a,m)=1\),求 \(a^{-1}\pmod m\)

欧拉定理:若 \(\gcd(a,m)=1\),则 \(a^{\varphi(m)}\equiv 1 \pmod m\)

\(a^{\varphi(m)}\equiv a^0 \pmod m\)。因此 \(a^{\varphi(m)-1}\equiv a^{-1} \pmod m\)

2. 如何求出 \(1\)\(n-1\)\(\bmod n\) 意义下的逆元?

注意到 \(n \bmod i=n−\lfloor \frac{n}{i} \rfloor i\),则 \(n \bmod i\equiv −\lfloor \frac{n}{i} \rfloor i\pmod n\),所以 \(i^{-1}\times (n\bmod i)\equiv -\lfloor \frac{n}{i} \rfloor\pmod n\)。故 \(i^{-1}\equiv -\lfloor \frac{n}{i} \rfloor\times (n\bmod i)^{-1}\pmod n\)

3. 如何求出 \(a_1,a_2,···,a_n\) 的逆元?

\(f_i=\prod\limits_{j=1}^i a_j \bmod p\)\(g_i=f_i^{-1}\bmod p\),则只要算出 \(f_n\) 并求出 \(g_n\),然后推回去即可。

十、线性同余方程组

注:关于中国剩余定理(CRT),具体戳 「算法笔记」CRT 与 exCRT(包含了 中国剩余定理 以及 扩展中国剩余定理)。

求解方程组 \(x\equiv a_i \pmod {m_i}\) 的方法?

中国剩余定理:\(m=\prod\limits_{i=1}^k m_i\),则在 \(m_i\) 两两互质时,\(x\equiv \sum\limits_{i=1}^k M_i N_i a_i \pmod m\),其中 \(M_i=\frac{m}{m_i}\),而 \(M_iN_i\equiv 1\pmod {m_i}\)

//Luogu P1495
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=20;
int n,p[N],a[N],m=1;
int exgcd(int a,int b,int &x,int &y){
    if(!b) return x=1,y=0,a;
    int d=exgcd(b,a%b,x,y);
    int z=x; x=y,y=z-y*(a/b);
    return d;
} 
int inv(int n,int mod){    //求 n 在模 mod 下的逆元 
    int x,y;
    exgcd(n,mod,x,y);    //gcd(M,p[i])=1 
    return (x%mod+mod)%mod;
}
int CRT(int m){
    int ans=0;
    for(int i=1;i<=n;i++){
        int M=m/p[i],t=inv(M,p[i]);    //由于 p[i] 不一定是质数,所以不能用费马小定理,也就是这里不能用快速幂求逆元(即不能用 t=mul(M,p[i]-2,p[i]),其中 mul 是快速幂)
        ans=(ans+a[i]%m*M%m*t%m)%m; 
    } 
    return ans;
}
signed main(){
    scanf("%lld",&n);
    for(int i=1;i<=n;i++)
        scanf("%lld%lld",&p[i],&a[i]),m*=p[i]; 
    printf("%lld\n",CRT(m));
    return 0;
}

十一、欧拉定理的应用

要求 \(a^b \bmod m\),只要求 \(b\bmod \varphi(m)\) 即可。

扩展欧拉定理:\(\gcd(a,m)\neq 1\) 时,\(a^b \equiv a^c \pmod m\),其中 \(c\)\(b<\varphi(m)\) 时即为 \(b\),否则为 \(b \bmod \varphi(m)+\varphi(m)\)

posted @ 2020-08-02 20:57  maoyiting  阅读(715)  评论(2编辑  收藏  举报