欧拉函数

定义 φ(n)\varphi(n) 表示 1∼n1\sim n 中与 nn 互质的数个数。
形式化地讲, φ(n)=∑i=1x[gcd⁡(i,n)=1]\varphi(n)=\sum_{i=1}^{x}[\gcd(i,n)=1],其中 [⋅][\cdot] 表示艾佛森括号。

性质 1

φ(pk)=pk−pk−1\varphi(p^k)=p^k-p^{k-1},其中 pp 为质数。

证明:
1∼pk1\sim p^k 中恰有 pk−1p^{k-1} 个 pp 的倍数,只有他们与 pkp^k 不互质。
即 φ(pk)=pk−pk−1\varphi(p^k)=p^k-p^{k-1}。

性质 2

欧拉函数是积性函数。
也就是说,对于互质 a,ba,b,φ(ab)=φ(a)φ(b)\varphi(ab)=\varphi(a)\varphi(b)。

证明:
引理1:xx 与 abab 互质的充要条件是 xx 与 aa 互质且 xx 与 bb 互质。
证明:显然。

引理2:xx 与 aa 互质的充要条件是 x mod ax \bmod a 与 aa 互质。
证明:由辗转相除法可知,gcd⁡(x,a)=gcd⁡(x mod a,a)\gcd(x,a)=\gcd(x \bmod a,a),而互质即两数最大公约数为 11,故成立。

引理3:若 a,ba,b 互质,k,k+a,k+2a,…,k+(b−1)ak,k+a,k+2a,\ldots,k+(b-1)a 在模 bb 意义下遍历 0∼b−10\sim b-1。
证明:只需证这 bb 个数模 bb 互不相同即可。假设存在两个数相同,即 ∃k<b,ka≡0(modb)\exist k<b, ka\equiv 0\pmod b,这显然与 a,ba,b 互质矛盾,故原命题成立。

则把 1∼ab1\sim ab 写成一个 aa 列 bb 行的表格。

12…a(a+1)(a+2)…2a⋮⋮⋱⋮(b−1)a+1(b−1)a+2…ab\begin{matrix} 1 &2 &\ldots & a\\ (a+1)& (a+2) & \ldots &2a \\ \vdots & \vdots & \ddots & \vdots\\ (b-1)a+1 & (b-1)a+2& \ldots & ab \end{matrix}

观察每一行,发现模 aa 都为 0∼a−10\sim a-1,则根据引理 2,恰有 φ(a)\varphi(a) 列与 aa 互质。
观察每一列,每一列为 k,k+a,k+2a,…,k+(b−1)ak,k+a,k+2a,\ldots,k+(b-1)a。根据引理 3,所以这 bb 个数恰好不重复的遍历了 0∼b−10\sim b-1,故每列中恰有 φ(b)\varphi(b) 个与 bb 互质。
由引理 1 可得,φ(ab)=φ(a)φ(b)\varphi(ab)=\varphi(a)\varphi(b)。

性质3

设 nn 的唯一分解 n=∏i=1spiαin = \displaystyle\prod_{i=1}^s p_i^{\alpha_i},则 φ(n)=n∏i=1spi−1pi\varphi(n)=n\displaystyle\prod_{i=1}^s\dfrac{p_i-1}{p_i}。

证明:
通过性质1,2推导可得。

φ(n)=∏i=1sφ(piαi)=∏i=1spiαi−1(1−pi)=n∏i=1spi−1pi\begin{aligned} &\varphi(n)\\ & = \displaystyle\prod_{i = 1}^s\varphi(p_i^{\alpha_i})\\ & = \displaystyle\prod_{i = 1}^s p_i^{\alpha_i-1}(1-p_i)\\ &=n\displaystyle\prod_{i=1}^s\dfrac{p_i-1}{p_i} \end{aligned}

应用:O(n)O(\sqrt n) 求一个数的欧拉函数。

1
2
3
4
5
6
7
8
9
10
11
12
template<typename T>
T phi(T x){
T ans = x;
for(T i=2;i*i<=x;i++){
if(x%i==0){
ans = ans/i*(i-1);
while(x%i==0)x/=i;
}
}
if (x > 1) ans = ans / x * (x - 1);
return ans;
}

性质4

φ(np)={φ(n)⋅(p−1)p∤nφ(n)⋅pp∣n\varphi(np)=\begin{cases} \varphi(n)\cdot(p-1) & p\nmid n \\ \varphi(n)\cdot p & p\mid n \end{cases}

证明:
通过性质 3 可以很简单证明,留作读者练习。

应用:O(n)O(n) 求出 1∼n1\sim n 的欧拉函数值(线性筛)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int p[N/2],cnt,phi[N];
bool vis[N];

void init(){
vis[1]=1;phi[1]=1;
for(int i=2;i<N;i++){
if(!vis[i]){
p[++cnt]=i;
phi[i]=i-1; // 质数
}
for(int j=1;j<=cnt&&i*p[j]<N;j++){
vis[i*p[j]]=1;
if(i%p[j]==0){
phi[i*p[j]]=phi[i]*p[j];
break;
}
else phi[i*p[j]]=phi[i]*(p[j]-1);
}
}
}

性质5(欧拉反演)

n=∑d∣nφ(d)n = \displaystyle\sum_{d\mid n} \varphi(d)。

证明:
考虑枚举 1∼n1\sim n 中和 nn 的最大公约数为 dd 的数个数。

n=∑d∣n∑i=1n[gcd⁡(i,n)=d]=∑d∣n∑i=1n/d[gcd⁡(i,n/d)=1]=∑d∣nφ(d)\begin{aligned} n=& \displaystyle\sum_{d\mid n}\sum_{i=1}^n[\gcd(i,n)=d]\\ =& \displaystyle\sum_{d\mid n}\sum_{i=1}^{ n/d}[\gcd(i, n/d)=1]\\ =& \displaystyle\sum_{d\mid n}\varphi(d)\\ \end{aligned}

欧拉反演

通过运用 n=∑d∣nφ(d)n = \displaystyle\sum_{d\mid n} \varphi(d),我们可以解决一系列问题,一种典型题目是求一系列 gcd⁡\gcd 的和。(对比莫比乌斯反演,莫反求的是 gcd⁡=k\gcd=k 的数量)

GCD SUM

P2398 GCD SUM
求 ∑i=1n∑j=1ngcd⁡(i,j)\displaystyle\sum_{i=1}^n \displaystyle\sum_{j=1}^n \gcd(i,j)。

∑i=1n∑j=1ngcd⁡(i,j)=∑i=1n∑j=1n∑d∣gcd⁡(i,j)φ(d)=∑i=1n∑j=1n∑d[d∣i][d∣j]φ(d)=∑d=1n∑d∣i∑d∣jφ(d)=∑d=1n⌊nd⌋2φ(d)\begin{aligned} &\displaystyle\sum_{i=1}^n \displaystyle\sum_{j=1}^n \gcd(i,j)\\ =&\displaystyle\sum_{i=1}^n \displaystyle\sum_{j=1}^n \displaystyle\sum_{d\mid \gcd(i,j)} \varphi(d)\\ =&\displaystyle\sum_{i=1}^n \displaystyle\sum_{j=1}^n \displaystyle\sum_{d}[d\mid i][d\mid j] \varphi(d)\\ =&\displaystyle\sum_{d=1}^n \sum_{d\mid i}\sum_{d\mid j} \varphi(d)\\ =&\displaystyle\sum_{d=1}^n \left \lfloor \dfrac{n}{d} \right \rfloor^2 \varphi(d)\\ \end{aligned}

练习:P1390 公约数的和

求 n 个数两两最大公约数的和

求 ∑i=1n∑j=1i−1gcd⁡(ai,aj)\displaystyle\sum_{i=1}^n \displaystyle\sum_{j=1}^{i-1} \gcd(a_i,a_j)。

只考虑一个 ii 求出 ∑j=1i−1gcd⁡(ai,aj)\displaystyle\sum_{j=1}^{i-1} \gcd(a_i,a_j)。

∑j=1i−1gcd⁡(ai,aj)=∑j=1i−1∑d∣gcd⁡(ai,aj)φ(d)=∑d∣aiφ(d)∑j=1i−1[d∣j]\begin{aligned} & \displaystyle\sum_{j=1}^{i-1} \gcd(a_i,a_j)\\ =& \displaystyle\sum_{j=1}^{i-1} \sum_{d\mid \gcd(a_i,a_j)}\varphi(d)\\ =& \sum_{d\mid a_i}\varphi(d)\displaystyle\sum_{j=1}^{i-1}[d\mid j]\\ \end{aligned}

我们只需求出 ∑j=1i−1[d∣j]\displaystyle\sum_{j=1}^{i-1}[d\mid j] 即可。
这个只需对 1∼i−11\sim i-1 的数的每个因数都加进它的贡献即可。

练习:

  1. [CF1900D] Small GCD
  2. [ARC185E] Adjacent GCD

莫比乌斯反演??

事实上,欧拉函数和莫比乌斯函数之间是密切相关的。

我们有狄利克雷卷积 φ=μ∗id⁡\varphi = \mu * \operatorname {id}
这就意味着,莫比乌斯反演和欧拉反演本质是能互相推导的。

具体内容先挖坑,以后计划写一篇从狄利克雷卷积角度重新认识欧拉函数和迪利克雷函数。