浅析欧拉函数
前置知识
欧拉定理 费马小定理 剩余系
证明:剩余系同乘 k 还是简化剩余系
证明:
设模 $$ m $$ 的简化剩余系为 $$ {a_1, a_2, \ldots, a_{\varphi(m)}} $$,其中每个 $$ a_i $$ 满足 $$ \gcd(a_i, m) = 1 $$。取与 $$ m $$ 互质的整数 $$ k $$(即 $$ \gcd(k, m) = 1 $$),考虑集合 $$ {k a_1, k a_2, \ldots, k a_{\varphi(m)}} $$,需证明此集合仍为模 $$ m $$ 的简化剩余系。
步骤 1:证明新集合中每个数与 $$ m $$ 互质
- 由于 $$ \gcd(k, m) = 1 $$ 且 $$ \gcd(a_i, m) = 1 $$,根据最大公约数的性质:\[\gcd(k a_i, m) = \gcd(k, m) \cdot \gcd(a_i, m) = 1 \cdot 1 = 1. \]因此,新集合中每个数 $$ k a_i $$ 均与 $$ m $$ 互质。
步骤 2:证明新集合中元素彼此模 $$ m $$ 不同余
- 假设存在 $$ i \neq j $$ 使得 $$ k a_i \equiv k a_j \pmod{m} $$。
- 因 $$ \gcd(k, m) = 1 $$,故 $$ k $$ 在模 $$ m $$ 下有逆元 $$ k^{-1} $$,两边同乘 $$ k^{-1} $$ 得:\[a_i \equiv a_j \pmod{m}. \]
- 但原简化剩余系中元素彼此不同余,矛盾。故 $$ k a_i \not\equiv k a_j \pmod{m} $$。
步骤 3:证明新集合覆盖所有简化剩余类
- 原简化剩余系有 $$ \varphi(m) $$ 个元素,新集合亦有 $$ \varphi(m) $$ 个元素。
- 由于步骤 2 已证元素彼此不同余,且每个元素与 $$ m $$ 互质,故新集合恰好构成模 $$ m $$ 的简化剩余系。
结论:
将简化剩余系中所有数同乘以一个与 $$ m $$ 互质的数后,所得集合仍为简化剩余系。
证毕。
定义
欧拉函数定义为小于等于 \(n\) 的正整数中与 \(n\) 互质的数的个数,记为 \(\varphi (n)\)。
\(\varphi (n)= \sum_{i=1}^{n}[ \gcd (i,n)=1]\)
性质
- \(n = \sum_{d \mid n} \varphi (n)\)。
- 欧拉函数是积性函数,即 \(\forall \gcd(a,b)=1 \ ,\varphi (ab) = \varphi (a) \varphi (b)\)。
- 若 \(p\) 是质数,则 \(\varphi (p) = p-1\)。
- 若 \(p\) 是质数,则 \(\varphi (p^k) = p^k - p^{k-1}\)。
- 若 \(n=a \times b\ ,\ \gcd(a,b)=d\) ,则 \(\varphi(n) = \frac{\varphi(a) \times \varphi(b) \times n}{\varphi(n)}\)。
- 若 \(n \ge 2\),所有小于 \(n\) 且与 \(n\) 互质的和为 \(\frac{\varphi(n) \times n}{2}\)。
性质选证
命题 \(1\):\(n = \sum_{d \mid n} \varphi (n)\)
将 \(n\) 分解质因数:
由\(\varphi(n)\) 是积性函数,故只需证:
由:
原命题得证。
命题 \(2\):\(\varphi(i,j)=\frac{\varphi(i) \varphi(j) \gcd(i,j)}{\varphi(\gcd(i,j))}\)
证明:
设 $$ i, j $$ 的最大公约数为 $$ d = \gcd(i, j) $$,则可将 $$ i, j $$ 分解为 $$ i = d \cdot a $$,$$ j = d \cdot b $$,其中 $$ \gcd(a, b) = 1 $$。此时 $$ ij = d^2 a b $$,需证明:
步骤 1:分解欧拉函数
由欧拉函数的积性,当 $$ \gcd(d^2, ab) = d $$(因为 $$ \gcd(a, b) = 1 $$),可得:
进一步分解 $$ \varphi(d^2) $$:
步骤 2:关联 $$\varphi(i)$$ 和 $$\varphi(j)$$
计算 $$ \varphi(i) $$ 和 $$ \varphi(j) $$:
因此:
步骤 3:代入公式
将 $$ \varphi(ij) $$ 与 $$ \varphi(i)\varphi(j) $$ 结合:
结论:
当 $$ i, j $$ 不互质时,欧拉函数满足:
证毕。
计算
算法一,分解质因数
如何计算 \(\varphi (n)\),根据以上性质,先将 \(n\) 分解质因数,\(n = p_1^{c_1} p_2^{c_2} p_3^{c_3} \dots p_k^{c_n}\),那么有:
算法二,欧拉筛
观察到进行欧拉筛的时候,可以求出每个数的最小质因数.
于是考虑在筛的时候求,具体地:
若 \(i\) 为质数,\(\varphi (i)=i-1\)。
否则设当前枚举到的质数为 \(p\),分两种情况:
若 \(i \equiv 0 \pmod p\),此时 \(i\) 包含了 \(i \times p\) 的所有因数,有:
若 \(i \not \equiv 0 \pmod p\),有:
代码:
int phi[maxn],prime[maxn],not_prime[maxn],cnt,sum[maxn];
void init(int n)
{
phi[1]=1,not_prime[1]=1;
for(int i=2;i<=n;++i)
{
if(!not_prime[i])
{
prime[++cnt]=i;
phi[i]=i-1;
}
for(int j=1;j<=cnt&&prime[j]*i<=n;++j)
{
not_prime[i*prime[j]]=1;
if(i%prime[j]==0)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else
{
phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
}
}
典型套路
一般看到关于 \(\gcd\) 的问题,可以先考虑欧拉函数能不能做,两种方式考虑问题:
- 考虑枚举 \(\gcd(i,j)\) 的值 \(d\),通过欧拉函数的定义化简。
- 欧拉反演,运用性质 \(n=\sum_{d \mid n} \varphi(n)\)。
#1 gcd 运算的对称性
\(\gcd\) 运算具有对称性,即 \(\gcd(i,n)=\gcd(n-i,n)\)。
于是有:
#2 欧拉反演
可以直接求解。
直接求时间复杂度 \(\Theta(n+qn)\),如果多组询问就爆了,可以使用数论分块,在 \(\Theta(n+q\sqrt n)\) 的时间求解。
同理上述过程还有:
#3 套路
这一步变换主要用于莫比乌斯反演。
当 \(n=m\) 时,可以用欧拉函数进一步化简。
首先有等式:
故:
#4 与 n 互质的数的和
求 \(\sum_{i=1}^{n}i[\gcd(i,n)=1]\)。
由欧几里得定理:
这说明与 \(n\) 互质的数一定成对出现,并且总和为 \(n\)。
由于与 \(n\) 互质的数一定有 \(\varphi(n)\) 个,所以:
特别地,\(n=1\) 时不成立,式子可以写成:
#5 lcm 相关
后面的式子即求 \(1 \sim d\) 中与 \(d\) 互质的数的个数,用上文的性质计算即可。
时间复杂度 \(\Theta(n+q\sqrt n)\)。

浙公网安备 33010602011771号