1. 程式人生 > 其它 >【學習筆記】尤拉函式

【學習筆記】尤拉函式

幾個基本的定義

數論函式

定義域為正整數的函式

積性函式

(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)\)