數學/數論專題-學習筆記:尤拉函式
一些 update
update 2021/5/20:刪除了一些話語,精煉了一些語言。
update 2021/8/11:發現擴充套件性質 3 的證明有問題,講解的也不清不楚,已經更正證明。
update 2021/8/12:發現基本性質 1 有誤,已經更正。
update 2021/8/24:根據最近所學到的東西,新增擴充套件性質 4。
update 2021/12/14:更新了一下前言部分與簡單性質部分,往基本性質 2 中加了一句不影響理解但有幫助的話,添加了擴充套件性質 2 的第二種證明,更新了摘要部分。
1. 前言
本篇博文將會重點講解尤拉函式,數論入門級別的函式。
在此之前,您需要知道以下幾個符號:
- \(d | n\) 表示 \(d\) 能整除 \(n\),等價於 \(d\) 是 \(n\) 的因數。\(d \nmid n\) 表示 \(d\) 不能整除 \(n\),等價於 \(d\) 不是 \(n\) 的因數。
- \(\sum_{i=1}^{n}=a_i\) 是求和符號,表示所有 \(a_i\) 的和。
- \(\prod_{i=1}^na_i\) 是求積符號,表示所有 \(a_i\) 的積。
-
\([A]\) 表示當 \(A\) 成立時 \([A]=1\),否則 \([A]=0\),比如 \([5=1]=0\)
本文預設讀者學過質數及其簡單性質與應用,包括但不限於分解質因數與線性篩/尤拉篩。
若無特殊說明,本文預設所有數都是正整數。
2. 前置定理
簡單定理:
- \(\gcd(a+mb,b)=\gcd(a,b)\)。
- \(\gcd(a,b)=d \Leftrightarrow \gcd(\dfrac{a}{d},\dfrac{b}{d})=1\)
- 一些別的定理(比如輾轉相除法之類的)
兩個關鍵定義:
積性函式:假設一個函式滿足以下條件:
\[f(a \times b) = f(a) \times f(b),\gcd(a,b)=1 \]那麼稱這個函式為積性函式。也就是說,積性函式的定義域內任取兩個互質的數 \(a,b\)
比如我們熟知的一次函式 \(f(x)=x\) 就是積性函式。
完全剩餘系:我們知道一個數模 \(n\) 共有 \(n\) 種結果,為 \(0,1,2,...,n-1\)。
那麼我們將其看成 \(n\) 類,第 \(i\) 類結果為 \(i\),那麼從每一類中取出一個數,這些數構成的集合就叫做模 \(n\) 的完全剩餘系。
比如說 \(\{51,22,63,104,200\}\) 就是模 \(5\) 的一個完全剩餘系,因為其模 \(5\) 的結果為 \(\{1,2,3,4,0\}\)。
一個簡單的性質:假設 \(t < a\) 且 \(\gcd(t,a)=1\),那麼 \(t,2t,3t,...,(a-1)t\) 構成了模 \(a\) 的完全剩餘系,且 \(\forall i \in N\),\(i+t,i+2t,i+3t,...,i+(a-1)t\) 也構成了模 \(a\) 的完全剩餘系。
3. 定義
首先來講講尤拉函式是個啥:
定義:在數論中,記尤拉函式 \(\varphi(n)\) 表示在 \([1,n-1]\) 內幾個數與 \(n\) 互質。
更加嚴謹的,有:\(\varphi(n)=\sum \limits_{i=1}^{n}[\gcd(i,n)=1]\)。
這就是尤拉函式。
4. 性質
強烈建議讀者拿出紙筆自己寫一些,可以更方便的理解。
尤拉函式的基本性質:
- 基本性質 1:若 \(p\) 為質數,那麼 \(\varphi(p)=p-1\)。特別的,\(\varphi(1)=1\)。
- 基本性質 2:設 \(n = p^k\) 且 \(p\) 為質數,那麼: \[\varphi(n)=n-\dfrac{n}{k}=n-p^{k-1}=p^{k-1} \times (p-1)=p^{k-1} \times \varphi(p) \] 其中 \(\varphi(p^k)=p^k-p^{k-1}=p^{k-1} \times (p-1)\) 用的會比較多。
- 基本性質 3:尤拉函式是積性函式。
- 基本性質 4:對於數 \(n\),將其質因數分解為 \(\prod_{i=1}^{k}{p_i}^{r_i}\),那麼: \[\varphi(n)=\prod_{i=1}^{k}\varphi(p_i^{r_i})=\prod_{i=1}^{k}(p_i^{r_i-1} \times (p_i-1))=n \times \prod_{i=1}^{k}(1-\dfrac{1}{p_i}) \]
接下來一條一條證明。
基本性質 1:
\(p\) 為質數的時候,顯然有 \([1,p-1]\) 內所有正整數都與 \(p\) 互質,那麼由定義:\(\varphi(p)=p-1\)。因為 1 和 1 互質,那麼 \(\varphi(1)=1\)。
基本性質 2:
引理:假設在 \([1,n]\) 範圍內有一個數 \(x\) 與 \(n\) 互質,那麼 \(x\) 與 \(n\) 互質的充要條件是 \(x\) 與 \(p\) 互質。引理正確性顯然。
那麼考慮正難則反,也就是:\(\varphi(n)=n-\sum\limits_{i=1}^{n}[gcd(i,n) \ne 1]\)。
也就是 \(n\) 減去與其不互質的數。
而要使 \(i\) 與 \(n\) 不互質,考慮到 \(p\) 是質數,那麼必然有 \(i\) 與 \(p\) 不互質。
那麼 \([1,n]\) 範圍內有幾個數與 \(p\) 不互質呢?\(\dfrac{n}{p}\) 個。
於是又因為 \(n=p^k\),且 \(\varphi(p)=p-1\),那麼:
\[\varphi(n)=n-\dfrac{n}{k}=n-p^{k-1}=p^{k-1} \times (p-1)=p^{k-1} \times \varphi(p) \]基本性質 3:
不妨假設 \(n=a \times b\),其中 \(\gcd(a,b)=1\)。
那麼要證明的就是 \(\varphi(n)=\varphi(a) \times \varphi(b)\)。
接下來考慮將 \(a \times b\) 個數按照矩陣鋪開,也就是長這樣:
\(\begin{matrix}1&2&\cdots&a-1&a\\a+1&a+2&\cdots&2a-1&2a\\\vdots&\vdots&\ddots&\vdots&\vdots\\(b-1) \times a+1&(b-1) \times a+2&\cdots&b \times a - 1&b \times a\\\end{matrix}\)
那麼顯然的,對於每一列的數而言,這一列的所有數模 \(a\) 的結果是相同的。
那麼考慮這 \(a\) 列,模 \(a\) 的結果就是 \([1,a]\)。這裡為了後續方便,就將模 \(a\) 為 \(0\) 視為模 \(a\) 為 \(a\)。
考慮到 \(\gcd(x,n)=1\) 的充要條件為 \(\gcd(x,a)=1,\gcd(x,b)=1\),而使得 \(\gcd(x,a)=1\) 的數總共有 \(\varphi(a)\) 列,因此先將這 \(\varphi(a)\) 列取出來,再做進一步的討論。
比如我們當前取出了第 \(i\) 列,那麼第 \(i\) 列的數就是 \(0a+i,1a+i,2a+i,...,(b-1)a+i\),總共 \(b\) 個數。
於是您會發現這些數構成了模 \(b\) 的完全剩餘系。
- 證明如下:不妨令 \(a>b\)。
首先顯然有 \(\gcd(a,b)=1\)(否則不符合積性函式的條件),那麼假設 \(a \bmod b = t\),那麼我們可以將數列轉換成如下形式:\(i,i+t,i+2t,...,i+(b-1)t\),而且必有 \(\gcd(t,b)=1\)。於是乎,這些數構成了模 \(b\) 的完全剩餘系。
那麼在這些數當中,有多少數滿足 \(\gcd(x,b)=1\) 呢?因為是完全剩餘系,所以有 \(\varphi(b)\) 個。
上面所有過程對於所有 \(\varphi(a)\) 列均成立,因此 \(\varphi(n)=\varphi(a) \times \varphi(b)\),證畢。
基本性質 4:
考慮到尤拉函式為積性函式且 \(\forall i,j \in [1,k],\gcd(p_i^{r_i},p_j^{r_j})=1\),那麼有:\(\varphi(n)=\prod_{i=1}^{k}\varphi(p_i^{r_i})\)
記得基本性質 2 的連等式嗎?通過第三個式子可以得到:\(\varphi(n)=\prod_{i=1}^{k}(p_i^{r_i-1} \times (p_i-1))\)
然後提取公因數 \(p\),將乘積符號裂成兩項,結合尤拉函式是積性函式,於是就有:
\[\varphi(n)=\prod_{i=1}^{k}(p_i^{r_i} \times (1-\dfrac{1}{p_i}))=\prod_{i=1}^{k}p_i^{r_i} \times \prod_{i=1}^{k}(1-\dfrac{1}{p_i})=n \times \prod_{i=1}^{k}(1-\dfrac{1}{p_i}) \]證畢。
您會發現其實基本性質 4 可以用來求 \(\varphi(n)\)。
尤拉函式的擴充套件性質:
- 擴充套件性質 1:設 \(n=a \times b,\gcd(a,b) = d \in N_+\),那麼 \(\varphi(n)=\dfrac{\varphi(a) \times \varphi(b) \times d}{\varphi(d)}\)。
- 擴充套件性質 2:\(\forall n \in N_+,n=\sum\limits_{d|n}{\varphi(d)}\)。
- 擴充套件性質 3:設 \(n \in N_+,p\) 為質數,那麼: \[\varphi(n \times p)=\begin{cases}\varphi(n) \times \varphi(p)&p \nmid n\\\varphi(n) \times p&p \mid n\end{cases} \]
- 擴充套件性質 4:對於一個數 \(n\)(\(n \geq 2\)),所有小於 \(n\) 且與 \(n\) 互質的數的和為 \(\varphi(n) \times \dfrac{n}{2}\)。
接下來一條一條證明。
擴充套件性質 1:
首先先對 \(a,b,d,n\) 做個質因數分解:
\[a=\prod_{i=1}^{m}p_i^{r_1{_i}},b=\prod_{i=1}^{m}p_i^{r_2{_i}},d=\prod_{i=1}^{m}p_i^{\min(r_1{_i},r_2{_i})},n=\prod_{i=1}^{m}p_i^{r_1{_i}+r_2{_i}} \]然後根據基本性質 4:
\[\varphi(a)=\prod_{i=1}^{m}\varphi(p_i^{r_1{_i}}),\varphi(b)=\prod_{i=1}^{m}\varphi(p_i^{r_2{_i}}) \] \[\varphi(d)=\prod_{i=1}^{m}\varphi(p_i^{\min(r_1{_i},r_2{_i})}),\varphi(n)=\prod_{i=1}^{m}\varphi(p_i^{r_1{_i}+r_2{_i}}) \]對要證明的式子直接暴力帶入:
\[\prod_{i=1}^{m}\varphi(p_i^{r_1{_i}+r_2{_i}})=\dfrac{\prod_{i=1}^{m}\varphi(p_i^{r_1{_i}}) \times \prod_{i=1}^{m}\varphi(p_i^{r_2{_i}}) \times \prod_{i=1}^{m}p_i^{\min(r_1{_i},r_2{_i})}}{\prod_{i=1}^{m}\varphi(p_i^{\min(r_1{_i},r_2{_i})})} \]結合基本性質 4 再一次轉化:
左邊:\(\prod_{i=1}^{m}(p_i^{r_1{_i}+r_2{_i}-1} \times (p_i-1))\)
右邊:
\[\dfrac{\prod_{i=1}^{m}(p_i^{r_1{_i}-1} \times (p_i-1)) \times \prod_{i=1}^{m}(p_i^{r_2{_i}-1} \times (p_i-1)) \times \prod_{i=1}^{m}p_i^{\min(r_1{_i},r_2{_i})}}{\prod_{i=1}^{m}(p_i^{\min(r_1{_i},r_2{_i})-1} \times p_i-1)} \]那麼拆掉乘積符號,右邊分子分母先約去 \(\prod_{i=1}^{m}(p_i-1)\),然後左右兩邊同時除以 \(\prod_{i=1}^{m}(p_i-1)\),再做一個簡單轉化,那麼要證明的式子就變成了:
\[\prod_{i=1}^{m}p_i^{r_1{_i}+r_2{_i}-1}=\prod_{i=1}^{m}p_i^{r_1{_i}+r_2{_i}-2} \times \prod_{i=1}^{m}\dfrac{p_i^{\min(r_1{_i},r_2{_i})}}{p_i^{\min(r_1{_i},r_2{_i})-1}}=\prod_{i=1}^{m}p_i^{r_1{_i}+r_2{_i}-1} \]證畢。
擴充套件性質 2:
法一:
首先眾所周知,這個等式對於任意 \(n \in N_+\) 恆成立:\(n=\sum_{i=1}^{n}1\)。
但是這玩意有什麼用呢?
我們對這個式子做一個變形:\(n=\sum_{d=1}^{n}\sum_{i=1}^{n}[\gcd(n,i)=d]\)。
也就是說,我們列舉一個最大公約數 \(d\),然後列舉 \(i \in [1,n]\)。
因為 \(\gcd(n,i)\) 的結果一定是唯一的,於是上式一定成立。
再觀察。如果 \(\gcd(n,i)=d\),那麼一定有 \(d \mid n\)。
於是對這個式子再做一個變形:\(n=\sum_{d \mid n}\sum_{i=1}^{n}[gcd(n,i)=d]\)。
根據最大公約數的這個性質:\(\gcd(a,b)=d \Leftrightarrow \gcd(\dfrac{a}{d},\dfrac{b}{d})=1\)(注意前提:\(d \mid a\) 且 \(d \mid b\)),再做一次轉化:
\[n=\sum_{d \mid n}\sum_{i=1}^{n}([\gcd(\dfrac{n}{d},\dfrac{i}{d})=1] \times [d \mid i]) \]然後看一下這個:\(\sum_{i=1}^{n}([\gcd(\dfrac{n}{d},\dfrac{i}{d})=1] \times [d \mid i])\)
這個式子中的 \(i \in[1,\dfrac{n}{d}]\)。
然後您會發現這實際上就是在判斷 \([1,\dfrac{n}{d}]\) 中有幾個數與 \(\dfrac{n}{d}\) 互質。
這不就是 \(\varphi(\dfrac{n}{d})\) 嗎?
於是等式變為 \(n=\sum_{d \mid n}\varphi(\dfrac{n}{d})=\sum_{d \mid n}\varphi(d)\)。
證畢。
法二:
設函式 \(f(n)=\sum_{d \mid n}\varphi(d)\),要證明的就是 \(f(n)=n\)。
先證 \(f(n)\) 是個積性函式:
取 \(n,m\) 且 \(\gcd(n,m)=1\),有:
\(f(n) \times f(m) = \sum_{i \mid n}\varphi(i)\sum_{j \mid m}\varphi(j)\)(定義暴力拆式子)
\(= \sum_{i \mid n}\sum_{j \mid m}\varphi(i) \times \varphi(j)\)(交換求和號)
\(=\sum_{i \mid n}\sum_{j \mid m}\varphi(i \times j)\)
上面這步是因為 \(\gcd(n,m)=1 \Rightarrow \gcd(i,j)=1\),尤拉函式是積性函式所以可以放進去,下面這步也是一樣的。
\(=\sum_{i \times j \mid n \times m}\varphi(i \times j)=f(nm)\)
現在 \(f(n)\) 是積性函式證完了,然後將 \(n\) 質因數分解為 \(\prod_{i=1}^{m}p_i^{k_i}\),於是我們有 \(f(n)=\prod_{i=1}^{m}f(p_i^{k_i})\),現在要證明的就是 \(f(p_i^{k_i})=p_i^{k_i}\)。
繼續拆式子:\(f(p_i^{k_i})=\varphi(1)+\varphi(p)+...+\varphi(p_i^{k_i})\)(定義拆式子)
\(=(1-0)+(p-1)+(p^2-p)+...+(p_i^{k_i}-p_i^{k_i-1})\)(利用基本性質二 \(\varphi(p_i^{k_i})=p_i^{k_i}-p_i^{k_i-1}\))
\(=p_i^{k_i}\)(消去同類項)
於是 \(f(p_i^{k_i})=p_i^{k_i}\),證畢,那麼也就證出了 \(f(n)=n\)。
證畢。
這個性質運用時有個專門的名字叫尤拉反演。
擴充套件性質 3:
首先考慮 \(p \nmid n\) 的情況。
這個時候肯定有 \(\gcd(p,n)=1\),那麼因為尤拉函式是積性函式,\(\varphi(n \times p)=\varphi(n) \times \varphi(p)\) 必然成立。
接下來考慮 \(p \mid n\) 的情況。
設 \(x \in [1,pn]\),因為 \(p \mid n\),那麼 \(\gcd(x,pn)=1\) 的充要條件是 \(\gcd(x,n)=1\)(顯然)。
因此 \(\varphi(n \times p)=\sum_{i=1}^{n \times p}[\gcd(i,n)=1]\)。
將 \([1,np]\) 內的數分為 \(p\) 類,第 \(i\) 類的數為 \([n \times i + 1,n \times (i + 1)]\)。
因為 \(\gcd(a + bn, n) = \gcd(a, n)\),因此對於第 \(i\) 類中的第 \(j\) 個數 \(n \times i + j\) 而言,\(\gcd(n \times i + j, n) = \gcd(j,n)\)。
這樣,每一類中和 \(n\) 互質的數的個數與第一類中和 \(n\) 互質的數的個數相同。
而顯然第一類中和 \(n\) 互質有 \(\varphi(n)\) 個,因此總共與 \(n\) 互質的數有 \(\varphi(n) \times p\) 個。
因此 \(\varphi(n \times p) = \varphi(n) \times p\)。
證畢。
擴充套件性質 4:
先看兩個引理:
- 引理 1:若 \(\gcd(i,n)=1\),則 \(\gcd(n-i,n)=1\)。
- 引理 2:對於 \(n \geq 3\),\(\varphi(n)\) 為偶數。
引理證明如下:
- 引理 1:考慮反證法。
設 \(\gcd(n-i,n)=k \neq 1\),不妨令 \(n=a \times k,n-i=b \times k,a,b \in Z,a>b\),那麼 \(i=n-i=(a-b) \times k\),則有 \(\gcd(i,n)=k \neq 1\),與條件 \(\gcd(i,n)=1\) 不符,因此原假設不成立,則原命題成立。 - 引理 2:令 \(n=\prod_{i=1}^{,m}p_i^{k_i}\),則 \(\varphi(n)=\prod_{i=1}^{m}(p_i-1) \times p_i^{k_i-1}\)。
考慮單獨提出 \((p_i-1) \times p_i^{k_i-1}\),若 \(p_i\) 為偶數則該式為偶數,若 \(p_i\) 為奇數則 \(p_i-1\) 為偶數,則該式依然是偶數,所以該式無論怎麼樣都是偶數。
由於一個式子是偶數,那麼這些式子乘起來也當然是偶數。
根據引理 1,在所有小於 \(n\) 並且與 \(n\) 互質的數中,若 \(i\) 存在,則 \(n-i\) 存在,而這兩個數加起來為 \(n\)。
接下來分類討論一波:
- 如果 \(n=2\),手算就可以得到答案是 1,就是 \(\varphi(2) \times \dfrac{2}{2}\)。
- 如果 \(n>2\),根據引理 2,我們可以得知這樣的 \((i,n-i)\) 類的數對有 \(\dfrac{\varphi(n)}{2}\),乘起來得到答案是 \(\varphi(n) \times \dfrac{n}{2}\)。
於是擴充套件性質 4 得證。證畢。
至此,所有性質就都證明完畢了,如果還有一些性質筆者沒有提到,煩請在討論區中提出,筆者將會採納,在此表示感謝。
5. 求法
求 \(\varphi(n)\) 有兩種求法,依據分別是基本性質 4 和擴充套件性質 3。
- 基本性質 4:用於求單個數的尤拉函式。
根據 \(\varphi(n)=\prod_{i=1}^{k}(p_i^{r_i-1} \times (p_i-1))\),對 \(n\) 做一個質因數分解,然後套公式就可以求了。
複雜度 \(O(\sqrt n)\)。
程式碼:
int ksm(int a, int b)
{
int ans = 1;
for (; b; b >>= 1, a = a * a)
if (b & 1) ans = ans * a;
return ans;
}
int Get(int n)//求單個數尤拉函式
{
int ans = 1;
for (int i = 2; i * i <= n; ++i)
{
int cnt = 0;
while (n % i == 0) {n /= i; ++cnt;}
if (cnt != 0) ans = ans * ksm(i, cnt - 1) * (i - 1);//基本性質 4
}
if (n != 1) ans = ans * (n - 1);//n^0=1
return ans;
}
- 擴充套件性質 3:用於快速求一連串的尤拉函式。
擴充套件性質 3 可以在 \(O(n)\) 的時間內求出 \([1,n]\) 內的所有尤拉函式值。
利用擴充套件性質 3 求尤拉函式需要用到線性篩。
先把上面這個式子搬過來:$$\varphi(n \times p)=\begin{cases}\varphi(n) \times \varphi(p)&p \nmid n\\varphi(n) \times p&p \mid n\end{cases}$$
考慮在篩質數的時候,假設當前已經篩出了 \(cnt\) 個質數,那麼對於當前數 \(i\),在做 \(O(n \ln \ln n)\) 的線性篩的時候,假設當前列舉到第 \(j\) 個質數 \(p_j\),那麼如果 \(i \bmod p_j=0\),那麼就有 \(\varphi(i \times p_j) = \varphi(i) \times p_j\),否則就有 \(\varphi(i \times p_j) = \varphi(i) \times (p_j-1)\)。
因為 \(p_j\) 是個質數,所以 \(\varphi(p_j)=p_j-1\)。
根據線性篩篩質數的正確性可知,以上過程一定正確。
程式碼:
vector <int> v;
void Get(int n)//求一連串尤拉函式
{
book[1] = 1; phi[1] = 1;
for (int i = 2; i <= n; ++i)
{
if (!book[i]) {v.push_back(i); phi[i] = i - 1;}//特別注意質數的初始化!
for (int j = 0; j < v.size(); ++j)
{
if (i * v[j] > n) break;
book[i * v[j]] = 1;
if (i % v[j] == 0) {phi[i * v[j]] = v[j] * phi[i]; break;}//多加一步算尤拉函式
phi[i * v[j]] = phi[i] * (v[j] - 1);//多加一步算尤拉函式
}
}
//最後結果就是 phi[] 陣列
}
6. 總結
尤拉函式的性質如下:
- 基本性質 1:若 \(p\) 為質數,那麼 \(\varphi(p)=p-1\)。特別的,\(\varphi(1)=1\)。
- 基本性質 2:設 \(n = p^k\) 且 \(p\) 為質數,那麼: \[\varphi(n)=n-\dfrac{n}{k}=n-p^{k-1}=p^{k-1} \times (p-1)=p^{k-1} \times \varphi(p) \] 其中 \(\varphi(p^k)=p^k-p^{k-1}=p^{k-1} \times (p-1)\) 用的會比較多。
- 基本性質 3:尤拉函式是積性函式。
- 基本性質 4:對於數 \(n\),將其質因數分解為 \(\prod_{i=1}^{k}{p_i}^{r_i}\),那麼: \[\varphi(n)=\prod_{i=1}^{k}\varphi(p_i^{r_i})=\prod_{i=1}^{k}(p_i^{r_i-1} \times (p_i-1))=n \times \prod_{i=1}^{k}(1-\dfrac{1}{p_i}) \]
- 擴充套件性質 1:設 \(n=a \times b,\gcd(a,b) = d \in N_+\),那麼 \(\varphi(n)=\dfrac{\varphi(a) \times \varphi(b) \times d}{\varphi(d)}\)。
- 擴充套件性質 2:\(\forall n \in N_+,n=\sum\limits_{d|n}{\varphi(d)}\)。
- 擴充套件性質 3:設 \(n \in N_+,p\) 為質數,那麼: \[\varphi(n \times p)=\begin{cases}\varphi(n) \times \varphi(p)&p \nmid n\\\varphi(n) \times p&p \mid n\end{cases} \]
- 擴充套件性質 4:對於一個數 \(n\)(\(n \geq 2\)),所有小於 \(n\) 且與 \(n\) 互質的數的和為 \(\varphi(n) \times \dfrac{n}{2}\)。
尤拉函式的求法如下:
- 利用基本性質 4:質因數分解後套公式即可。
- 利用擴充套件性質 3:線上性篩質數的時候多加一步算 \(\varphi(n)\) 即可。
練習:
- 獨立寫出 8 個性質及其證明過程。
- 獨立寫出 2 種求尤拉函式的程式碼。