1. 程式人生 > 實用技巧 >數論基礎篇

數論基礎篇

數論

一、整除

\(b=k\times a(k\in \mathbb Z)\Leftrightarrow a|b\Leftrightarrow\) \(\color{red} a 是 b 的因子\)

  1. 性質: \(a|b\) 且 $a|c\Leftrightarrow $ \(a|(ma+nb),m,n\in \mathbb Z\)

  2. 猜結論,從 “因子” 的角度證明。

二、同餘

\(a\equiv b\mod m\Leftrightarrow \color{red} m|(a-b)\)

  1. 性質

    (1) 加減: \(a\equiv x,b\equiv y\Rightarrow a\pm b\equiv x\pm y\)

    (2) 乘:

    \[\qquad\begin{cases}a\equiv x,b\equiv y\Rightarrow ab\equiv xy\\a\equiv b \Rightarrow a^k\equiv b^k\end{cases} \]

    (3) 除:

    \[\qquad\begin{cases}ac\equiv bc \mod m~且~m\perp c\Rightarrow a\equiv b \mod \\a\equiv b \mod m~且~d~|~a,b,m \Rightarrow \frac{a}{d}\equiv \frac{b}{d} \mod \frac{m}{d} \end{cases} \]

    (4) 因數: \(a\equiv b\mod m\Rightarrow a\equiv b \mod n,n|m\)

    (5) 倍數: \(a\equiv b \mod m,n\Rightarrow a\equiv b\mod [m,n]\)

    (6) 結合律:

    \(\color{red}(a\pm b)\% m = (a\%m\pm b\%m) \%m\)

    $\color{red}(a\times b)\%m = (a\% m\times b\%m)\%m$
    

    (7) \(\color{red}\large乘法逆元\)

    ​ 當 \(\color{red}a\perp m\) 時,記模 \(m\)

    意義下 \(inv_i\) 為滿足: \(i\times inv_i\equiv 1\mod m\) 的整數。

    ​ 求法:

    ​ <1>蒙哥馬利:當 \(m\) 為質數時, \(inv_x=x^{m-2}\)

    ​ 證明:由費馬大定理, \(m\) 為質數時 \(x^{m-1}\equiv 1\) ,則 \(x^{m-2}\equiv x^{-1}\)

    ​ <2>歐幾里得求法

    ​ 設 \(x=inv_a\) ,那麼要解 \(ax\equiv 1\mod m\) ,等效於解 \(ax+bm=1\) 。最後調整 \(x\)\([1,m-1]\)

    ​ <3>線性推逆元

    ​ 設 \(\rm s=P/x,t=P%x\) ,則 \(\rm P=sx+t\equiv 0 \mod P\) ,移項得 \(\frac{1}{x}\equiv \frac{-s}{t}\)

    ​ <4>線性推階乘逆元

    ​ 由於 \(i!~inv_{i!}\equiv 1\equiv (i+1)!~inv_{(i+1)!}\) ,則 \(inv_{i!}=(i+1)\times inv_{(i+1)!}\)

    整除 推性質。

  2. *一些定義

    (1) 同餘類:模 \(m\) 意義下 \(x\) 的同餘類定義為:由所有在模 \(m\) 意義下等於 \(x\) 的陣列成的集合。這樣的集合共 \(m\) 個。

    (2) 完全剩餘系:由模 \(m\) 的的 \(m\) 個同餘類中分別取出一個數組成模 \(m\) 的一個完系。

    ​ 在完系中,任意兩個數模 \(m\) 互不同餘。

    (3) 縮剩餘系:在完系中保留所有與 \(m\) 互質的數。

    ​ 縮系大小為 \(\phi(m)\) ,且縮系中任意兩個元素 \(\times 或/\) 的結果仍然是某個縮系元素的同餘類。

    性質:

    (1) 若 \(a_{1,2...m}\) 是模 \(m\) 下的一個完系,且 \(x\perp m\) ,那麼 \(xa_i+b\) 也是完系。

    ​ 若 \(a_i\) 為一個縮系且 \(x\perp m\) ,那麼 \(xa_i+b\) 也是縮系。

    (2) 若 \(a_i\) 為一個完系,則 $$\sum a_i\equiv \frac{m(m+1)}{2}\mod m$$

    (3) 若 \(a_i,b_i\) 均為縮系,則 $$\prod a_i\equiv \prod b_i \mod m$$

    這些東西和一些東西的證明有關,比如:尤拉定理、原根等等。不要求完全掌握。

三、素數

  1. 算術基本定理:

    任意數可唯一拆解為 \(x=\prod p_i^{\alpha_i}\) ,其中 \(p_i\) 為質數, \(\alpha_i\in \mathbb N\)

    拓:

    (1) 約數個數:\(\prod(a_i+1)\)

    (2) 約數和: \(\prod (1+p_i^1+p_i^2+...p_i^{\alpha_i})=\prod \frac{p_i^{\alpha_i+1}-1}{p_i-1}\)

    (3) \((a,b)=\prod p_i^{\min(\alpha_i,\beta_i)},[a,b]=\prod p_i^{\max(\alpha_i,\beta_i)}\)

    \((a,b)\times [a,b]=ab\)

  2. 質數的判定

    定理:\(n\) 以內素數個數隨 \(n\) 的增大逐漸逼近 \(\frac{n}{ln~n}\)

    (1) 樸素判定

    ​ 定理:如果 \(n\) 是合數,那麼一定存在一個 \(\le \sqrt{n}\) 的質數是它的因子。

    ​ 列舉所有 \(\le \sqrt n\) 的數,判斷其是不是 \(n\) 的因子即可。 \(\mathcal O(\sqrt n)\)

    (2) 埃氏篩

    ​ 對於每個素數,把它的所有倍數篩去。

    rep(i,1,n)if(!p[i])
    	for(int j=p[i]+p[i];j<=n;j+=p[i])
    		p[j]=1;
    

    ​ 定理: \(\sum_{p\le n}\frac{1}{p}=\log \log n\)
    所以埃氏篩複雜度為 \(\mathcal O(n\log \log n)\)

    ​ 埃氏篩的優勢:能夠比較準確地 運用某些數 來篩去 某個範圍內的值

    ​ 經典例題:給定常數 \(K\) ,定義一個滿足 \(x>1\)\(\forall i \in [2,min(K,x-1),i\nmid x\) 的數 \(x\) 為類質數,求 \([L,R]\) 所有類質數的和。 \(\rm L,R\le 10^9,R-L\le 10^7\) 。於是我們先求出所有 \(\le K\) 的質數,再用這些數去篩掉 \([L,R]\) 中的數。

(3) 尤拉篩
注意到埃氏篩中很多數被多個素數篩掉,我們改進一下使得每個數只被其最小的質因子篩掉。這就是尤拉篩。

```
rep(i,1,n){
	if(!p[i])pr[++cnt]=i;
	rep(j,1,cnt){
		if(i*pr[j]>n)break;
		p[i*pr[j]]=1;
		if(i%pr[j]==0)break;
	}
}
```

​ 複雜度 \(\mathcal O(n)\)

​ (4) \(\rm Miller-Rabin\) 素數判定

​ <1> 前置:

​ 費馬小定理: \(p\) 為質數時, \(\forall a,a^{p-1}\equiv 1\mod p\)

​ 費馬素數檢測: \(a^{p-1}\equiv 1\mod p\)\(p\) 為素數的充分不必要條件。

​ 二次探測定理:當 \(p\) 為素數時, \(x^2\equiv 1\mod p\) 當且僅當 \(x=1或p-1\) 。那麼我們可以記錄 \(y=x^2\) ,如果 \(y=1\) 但是 \(x\ne1或p-1\) ,那麼 \(p\) 就不是素數。

​ <2> 實現:

​ i. 直接判斷 0,1,2 和偶數。

​ ii. 將 \(p-1\) 拆分成 \(2^k\times t\) 的形式,方便二次探測。

​ iii. 隨機一個 \(\le p-1\)\(a\) ,初始 \(x=a^t\%p\) ,不斷二次探測,共進行 \(k\) 次。

​ iiii. 最後 \(x=a^{p-1}\) ,檢測 \(x\) 是否與 \(1\) 同餘。

​ iiiii. 返回 iii ,進行 \(10\) ~ \(20\) 次。

bool pd(int p){
	if(p<=1)return false;
	if(p==2)return true;
	if(!(p&1))return false;
	int k=0,t=p-1;
	while(!(t&1))t>>=1,++k;
	rep(i,1,10){
		int a=random(p-1);
		int x=kpow(a,t,p);
		rep(j,1,k){
			int y=x*x%p;
			if(y==1&&x!=1&&x!=p-1)return false;
			x=y;
		}
		if(x!=1)return false;
	}return true;
}

​ 雖然是個隨機化演算法,但是檢測很多次後基本上能保證正確性。複雜度 \(\mathcal O(n^{\frac{1}{4}})\)

四、重要數論定理及演算法

  1. 歐幾里得演算法與擴充套件歐幾里得演算法

    (1) 歐幾里得演算法求 \(gcd\)

    ​ 若 \(d~|~a,d~|~b\) ,則 \(d~|~(ax+by)\) ,那麼一定滿足 \(d~|~(a-\lfloor\frac{a}{b}\rfloor\times b)\) ,那麼 \(d~|~gcd(a,b)\) 。所以 \(gcd(a,b)=gcd(b,a\%b)\)

    \(a\to a\%b\) ,首先 \(a\ge b\) ,在值域上每 \(b\) 分段,那麼無論 \(a\) 在哪一段,都滿足 \(a\%b\le \frac{a}{2}\) 。所以每次遞迴中,大的那個數至少減半,複雜度 \(\mathcal O(\log(a+b))\)

    (2) 擴充套件歐幾里得演算法解丟番圖方程:

    ​ <1> 丟番圖方程:形如 \(a_1x_1+a_2x_2+...a_nx_n=c\) 的不定方程。這裡只考慮 \(ax+by=c\)

    ​ <2> 裴蜀定理:丟番圖方程有解的充要條件為 \(gcd(a_1,x_2...a_n)|c\)

    ​ <3> 擴充套件歐幾里得演算法:解 \(ax+by=(a,b)\) 得出一組整數解。

    ​ 由於 \(ax_1+by_1=(a,b)\)\((a,b)=(b,a\%b)\) ,那麼 \(ax_1+by_1=bx_2+a\%by_2\)

    ​ 又因為 \(bx_2+a\%by_2=bx_2+ay_2-\lfloor\frac{a}{b}\rfloor\times by_2=y_2a+(x_2-\lfloor\frac{a}{b}\rfloor y_2)b\)

    ​ 換主元,係數相同一定是一組解,那麼 \(\begin{cases}x_1=y_2\\y_1=x_2-\lfloor\frac{a}{b}\rfloor y_2\end{cases}\) ,遞迴處理即可。

    ​ 邊界為 \(b=0\) 時, \(x=1,y=0\)

    ​ 通解:\(\begin{cases}x=x_0+t\times \frac{b}{(a,b)}\\y=y_0-t\times \frac{a}{(a,b)}\end{cases},t\in \mathbb Z\)

    \(ax+by=c\)\(c\ne (a,b)\) ,相當於解 \(ax+by=k\times (a,b)\)\(ax'+by'=(a,b),x=kx',y=ky'\)

  2. 尤拉定理與費馬小定理

    ​ (1) 尤拉函式 \(\varphi(n)\)\(\sum_{i=1}^{n-1}[gcd(i,n)==1]\) (小於 \(n\) 的數中與 \(n\) 互質的正整數的個數)

    ​ <1> 性質

    ​ i. 積性函式:若 \(a\perp b\) ,則 \(\phi(ab)=\phi(a)\times \phi(b)\)

    ​ ii. \(\sum_{d|n} \varphi(d)=n\)

    ​ iii. \(\varphi\times I=id\) (反演中用到)

    ​ <2> 求法

    ​ i. 通式法: \(\varphi(n)=n\prod_{p_i|n} (1-\frac{1}{p_i})\)

    ​ 證明:

    ​ 當 \(n\) 為質數時: \(\varphi(n)=n-1\) 。小於 \(n\) 的所有數都與 \(n\) 互質。

    ​ 當 \(n=p^k\) 時: \(\varphi(p^k)=p^k-p^{k-1}=p^k\times (1-\frac{1}{p})\)\(n\) 以內只有 \(p\) 的倍數與 \(n\) 不互質,而 \(p\) 的倍數有 \(p,2p,3p...p^{k-1}\cdot p\)\(p^{k-1}\) 個。

    ​ 當 \(n\) 一般時,將 \(n\) 唯一分解為 \(\prod_{p_i|n} p_i^{\alpha_i}\) 。由於 \(\varphi\) 為積性函式,則

    ​ $$\varphi(n)=\prod_{p_i|n} \varphi(p_i^{\alpha_i})=\prod_{p_i|n} p_i^{\alpha_i}\times (1-\frac{1}{p_i})=n\times \prod_{p_i|n} (1-\frac{1}{p_i})$$

    ​ 證畢。

    ​ ii. 尤拉篩

    ​ 當 \(x\) 為質數時, \(\varphi(x)=x-1\)

    ​ 當 \(x=i\times p_j\)\(i\perp p_j\) 時,由積性函式, \(\varphi(x)=\varphi(i)\times \varphi(p_j)\)

    ​ 當 \(x=i\times p_j\)\(i\%p_j\ne0\) 時, \(\varphi(x)=p_j\times \varphi(i)\)

    ​ 理解:由通式,在 \(i\) 基礎上多乘一個 \(p_j\) 並不改變 \(\prod_{p_i|n}(1-\frac{1}{p_i})\) ,只是使 \(n=i\to i\times p_j\)

    ​ (2) 尤拉定理: \(\color{red}a\perp m\) 時, \(a^{\varphi(m)}\equiv 1\mod m\)

    ​ 證明:設 \(x_i,i\in[1,\varphi(m)]\) 是模 \(m\) 意義下的一個縮系,若 \(a\perp m\) ,那麼 \(ax_i\) 也是一個縮系。(性質 (1) )

    ​ 根據縮系的性質 (3) , \(\prod x_i\equiv\prod ax_i \mod m\)

    ​ 又因為 \(\prod ax_i=a^{\varphi(m)}\prod x_i\) ,所以 \(a^{\varphi(m)}\equiv 1 \mod m\)

    ​ (3) 費馬小定理:當 \(m\) 為質數時, \(a^{m-1} \equiv 1 \mod m\) 。尤拉定理是對其的一般化。

    ​ (4) *擴充套件尤拉定理:

    ​ $$a^b\equiv\begin{cases}a^{b%\varphi(m)},(a,m)=1\ a^b,(a,m)\ne 1,b<\varphi(m)\ a^{b%\varphi(m)+\varphi(m)},(a,m)\ne 1,b\ge\varphi(m) \end{cases} \equiv a^{min(b,b%\varphi(m)+\varphi(m))}$$

  3. *威爾遜定理: \((p-1)!\equiv -1\mod p\Leftrightarrow p\) 為質數。

  4. 中國剩餘定理 \(\rm (CRT)\)

    ​ 求一個 \(x\) 滿足 \(\begin{cases}x\equiv a_1\mod m_1\\x\equiv a_2\mod m_2\\\vdots \qquad\vdots\qquad\qquad\vdots\end{cases}\) 。其中 \(\color{red}m_i 互質\)

    ​ 解:設 \(S=\prod m_i\)\(M_i=\frac{S}{m_i}\)\(y_i\) 為模 \(m\) 意義下 \(M_i\) 的逆元。

    ​ 那麼 \(a_iM_iy_i\equiv \begin{cases}a_i\mod m_i(y_i為逆元)\\ 0\mod m_j,j\ne i(M_i含有m_i的因子)\end{cases}\)

    ​ 所以 \(x=\sum a_iM_iy_i\) 一定是一個解。通解為 \((\sum a_iM_iy_i)+kS\)

    *擴充套件中國剩餘定理

  5. \(\rm Lucas\) 定理

    \[\tbinom{n}{m}\%p=\tbinom{n/p}{m/p}\times \tbinom{n\%p}{m\%p}\%p \]