【學習筆記】尤拉函式
幾個基本的定義
數論函式
定義域為正整數的函式
積性函式
(1)若 \(a,b\) 互質,則 \(f(ab) = f(a)f(b)\)
(2)對於一個正整數 \(n\),將其寫為 \(n = \prod p_i^{k_i}\),則 \(f(n) = f(p_i^{k_i})f(\frac{n}{p_i^{k_i}}) = \prod f(p_i^{k_i})\)
完全積性函式
在任意條件下,都滿足 \(f(ab) = f(a)f(b)\)。
尤拉函式
基本定義
我們定義 \(\varphi(n)\) 為尤拉函式,其定義為不超過 \(n\) 且與 \(n\) 互質的數的個數。
基本性質
性質一
設 \(n = \prod p_i^{k_i}\)
\(\varphi(n) = n \prod (1 - \dfrac{1}{p_i})\)
性質二
若 \(a,b\) 互質,那麼 \(\varphi(ab) = \varphi(a)\varphi(b)\),即尤拉函式是一個積性函式。
可以通過性質一來證明。
性質三
\(\varphi(p^k) = p^k - p^{k-1} = (p-1)p^{k-1}\)
可以通過性質一來證明。
性質四
若 \(n\) 為奇數,那麼存在 \(\varphi(2n) = \varphi(n)\)
可以用尤拉函式的積性來證明。
性質五
若 \(n\) 大於 \(2\),那麼存在 \(\varphi(n)\)
所有與 \(n\) 互質的數的和為 \(\dfrac{\varphi(n)}{2}n\) ,因為與 \(n\) 互質的數都是成對存在的,也就是說若存在 \(i\) 與 \(n\) 互質,那麼 \(n-i\) 與 \(n\) 也互質,以這個性質就可以得出上文的那個式子
性質六
若 \(n\) 為質數,那麼 \(\varphi(n) = n-1\)。
這個是非常顯然的。
性質七
\(\sum_{d|n} \varphi(d) = n\)
很有用的一個性質。
線性篩求尤拉函式
(1)若 \(n\) 為質數,根據性質七就好
(2)若 \(i\) 與 \(prime_j\) 不互質,\(\varphi(i \times prime_j) = \varphi(i) \times prime_j\)
(3)若 \(i\) 與 \(prime_j\) 互質,\(\varphi(i \times prime_j) = \varphi(i)\varphi(prime_j) = (p-1)\varphi(i)\),可以根據性質二、六證明
程式碼實現:
點選檢視程式碼
void Phi(long long mx){
phi[1] = 1;
for(long long i=2; i<=mx; i++){ //切記切記 i 從 2 開始,從 1 就會有大錯
if(!no_pri[i]){
pri[++size] = i;
phi[i] = i-1;
}
for(long long j=1; j<=size && i * pri[j] <=mx; j++){
no_pri[i * pri[j]] = true;
if(i % pri[j] == 0){
phi[i * pri[j]] = phi[i] * pri[j];
break;
}
else{
phi[i * pri[j]] = phi[i] * (pri[j] - 1);
}
}
}
}
程式碼解釋:
\(pri_i\) 表示第 \(i\) 個質數,\(phi_i\) 表示 \(\varphi(i)\)