「算法筆記」基礎數論


續:「算法筆記」基礎數論 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)\)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM