【学习笔记】欧拉函数

几个基本的定义

数论函数

定义域为正整数的函数

积性函数

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

posted @ 2022-05-19 20:14  linyihdfj  阅读(182)  评论(0编辑  收藏  举报