欧拉函数
定义
欧拉函数(Euler's totient function),即 𝜑(𝑛)φ(n),表示的是小于等于 𝑛n
和 𝑛n
互质的数的个数.
比如说 𝜑(1) =1φ(1)=1.
当 𝑛n 是质数的时候,显然有 𝜑(𝑛) =𝑛 −1φ(n)=n−1
.
性质
- 欧拉函数是 积性函数.
即对任意满足 gcd(𝑎,𝑏) =1gcd(a,b)=1 的整数 𝑎,𝑏a,b
,有 𝜑(𝑎𝑏) =𝜑(𝑎)𝜑(𝑏)φ(ab)=φ(a)φ(b)
.
特别地,当 𝑛n 是奇数时 𝜑(2𝑛) =𝜑(𝑛)φ(2n)=φ(n)
.
证明参见 剩余系的复合.
- 𝑛 =∑𝑑∣𝑛𝜑(𝑑)n=∑d∣nφ(d)
.
证明
利用 莫比乌斯反演 相关知识可以得出.
也可以这样考虑:如果 gcd(𝑘,𝑛) =𝑑gcd(k,n)=d,那么 gcd(𝑘𝑑,𝑛𝑑) =1,(𝑘 <𝑛)gcd(kd,nd)=1,(k<n)
.
如果我们设 𝑓(𝑥)f(x) 表示 gcd(𝑘,𝑛) =𝑥gcd(k,n)=x
的数的个数,那么 𝑛 =∑𝑛𝑖=1𝑓(𝑖)n=∑i=1nf(i)
.
根据上面的证明,我们发现,𝑓(𝑥) =𝜑(𝑛𝑥)f(x)=φ(nx),从而 𝑛 =∑𝑑∣𝑛𝜑(𝑛𝑑)n=∑d∣nφ(nd)
.注意到约数 𝑑d
和 𝑛𝑑nd
具有对称性,所以上式化为 𝑛 =∑𝑑∣𝑛𝜑(𝑑)n=∑d∣nφ(d)
.
- 若 𝑛 =𝑝𝑘n=pk
,其中 𝑝p
是质数,那么 𝜑(𝑛) =𝑝𝑘 −𝑝𝑘−1φ(n)=pk−pk−1
. (根据定义可知)
- 由唯一分解定理,设 𝑛 =∏𝑠𝑖=1𝑝𝑘𝑖𝑖n=∏i=1spiki
,其中 𝑝𝑖pi
是质数,有 𝜑(𝑛) =𝑛 ×∏𝑠𝑖=1𝑝𝑖−1𝑝𝑖φ(n)=n×∏i=1spi−1pi
.
证明
- 引理:设 𝑝p
为任意质数,那么 𝜑(𝑝𝑘) =𝑝𝑘−1 ×(𝑝 −1)φ(pk)=pk−1×(p−1)
.
证明:显然对于从 1 到 𝑝𝑘pk 的所有数中,除了 𝑝𝑘−1pk−1
个 𝑝p
的倍数以外其它数都与 𝑝𝑘pk
互素,故 𝜑(𝑝𝑘) =𝑝𝑘 −𝑝𝑘−1 =𝑝𝑘−1 ×(𝑝 −1)φ(pk)=pk−pk−1=pk−1×(p−1)
,证毕.
接下来我们证明 𝜑(𝑛) =𝑛 ×∏𝑠𝑖=1𝑝𝑖−1𝑝𝑖φ(n)=n×∏i=1spi−1pi.由唯一分解定理与 𝜑(𝑥)φ(x)
函数的积性
𝜑(𝑛)=𝑠∏𝑖=1𝜑(𝑝𝑘𝑖𝑖)=𝑠∏𝑖=1(𝑝𝑖−1)×𝑝𝑖𝑘𝑖−1=𝑠∏𝑖=1𝑝𝑖𝑘𝑖×(1−1𝑝𝑖)=𝑛 𝑠∏𝑖=1(1−1𝑝𝑖)◻φ(n)=∏i=1sφ(piki)=∏i=1s(pi−1)×piki−1=∏i=1spiki×(1−1pi)=n ∏i=1s(1−1pi)◻
- 对任意不全为 00
的整数 𝑚,𝑛m,n
,𝜑(𝑚𝑛)𝜑(gcd(𝑚,𝑛)) =𝜑(𝑚)𝜑(𝑛)gcd(𝑚,𝑛)φ(mn)φ(gcd(m,n))=φ(m)φ(n)gcd(m,n)
.
可由上一条直接计算得出.
实现
如果只要求一个数的欧拉函数值,那么直接根据定义质因数分解的同时求就好了.这个过程可以用 Pollard Rho 算法优化.
参考实现
C++Python
---|---
---|---
如果是多个数的欧拉函数值,可以利用后面会提到的线性筛法来求得.
详见:筛法求欧拉函数
应用
欧拉函数常常用于化简一列最大公约数的和.国内有些文章称它为 欧拉反演1.
在结论
𝑛=∑𝑑|𝑛𝜑(𝑑)n=∑d|nφ(d)
中代入 𝑛 =gcd(𝑎,𝑏)n=gcd(a,b),则有
gcd(𝑎,𝑏)=∑𝑑|gcd(𝑎,𝑏)𝜑(𝑑)=∑𝑑[𝑑|𝑎][𝑑|𝑏]𝜑(𝑑),gcd(a,b)=∑d|gcd(a,b)φ(d)=∑d[d|a][d|b]φ(d),
其中 [ ⋅][⋅] 为 Iverson 括号.对上式求和,就可以得到
𝑛∑𝑖=1gcd(𝑖,𝑛)=∑𝑑𝑛∑𝑖=1[𝑑|𝑖][𝑑|𝑛]𝜑(𝑑)=∑𝑑⌊𝑛𝑑⌋[𝑑|𝑛]𝜑(𝑑)=∑𝑑|𝑛⌊𝑛𝑑⌋𝜑(𝑑).∑i=1ngcd(i,n)=∑d∑i=1n[d|i][d|n]φ(d)=∑d⌊nd⌋[d|n]φ(d)=∑d|n⌊nd⌋φ(d).
这里关键的观察是 ∑𝑛𝑖=1[𝑑|𝑖] =⌊𝑛𝑑⌋∑i=1n[d|i]=⌊nd⌋,即在 11
和 𝑛n
之间能够被 𝑑d
整除的 𝑖i
的个数是 ⌊𝑛𝑑⌋⌊nd⌋
.
利用这个式子,就可以遍历约数求和了.需要多组查询的时候,可以预处理欧拉函数的前缀和,利用数论分块查询.
给定 𝑛 ≤100000n≤100000,求
𝑛∑𝑖=1𝑛∑𝑗=1gcd(𝑖,𝑗).∑i=1n∑j=1ngcd(i,j). 思路
仿照上文的推导,可以得出
𝑛∑𝑖=1𝑛∑𝑗=1gcd(𝑖,𝑗)=𝑛∑𝑑=1⌊𝑛𝑑⌋2𝜑(𝑑).∑i=1n∑j=1ngcd(i,j)=∑d=1n⌊nd⌋2φ(d).
此时需要从 11 遍历到 𝑛n
求欧拉函数,用线性筛做就可以 𝑂(𝑛)O(n)
得到答案.
欧拉定理
与欧拉函数紧密相关的一个定理就是欧拉定理.其描述如下:
若 gcd(𝑎,𝑚) =1gcd(a,m)=1,则 𝑎𝜑(𝑚) ≡1(mod𝑚)aφ(m)≡1(modm)
.
扩展欧拉定理
当然也有扩展欧拉定理,用于处理一般的 𝑎a 和 𝑚m
的情形.
𝑎𝑏≡⎧{ {⎨{ {⎩𝑎𝑏mod𝜑(𝑚),gcd(𝑎,𝑚)=1𝑎𝑏,gcd(𝑎,𝑚)≠1,𝑏<𝜑(𝑚)𝑎𝑏mod𝜑(𝑚)+𝜑(𝑚),gcd(𝑎,𝑚)≠1,𝑏≥𝜑(𝑚)(mod𝑚)ab≡{abmodφ(m),gcd(a,m)=1ab,gcd(a,m)≠1,b<φ(m)abmodφ(m)+φ(m),gcd(a,m)≠1,b≥φ(m)(modm)
证明和习题详见 欧拉定理.
习题
- SPOJ ETF. Euler Totient Function
- UVa 10179. Irreducible Basic Fractions
- UVa 10299. Relatives
- UVa 11327. Enumerating Rational Numbers
- TIMUS 1673. Admission to Exam
- Luogu P1390 公约数的和
- [Luogu P2155 [SDOI2008] 沙拉公主的困惑](https://www.luogu.com.cn/problem/P2155)
- Luogu P2568 GCD
参考资料与注释
- 这一说法并未见于学术期刊或国外的论坛中,在使用该说法时应当注意. ↩
本页面最近更新: 2026/1/7 08:56:54,更新历史 发现错误?想一起完善?在 GitHub 上编辑此页! 本页面贡献者:Ir1d, guodong2005, sshwy, Tiphereth-A, Xeonacid, c-forrest, Enter-tainer, iamtwz, MegaOwIer, StudyingFather, Chrogeek, mgt, shuzhouliu, aofall, CCXXXI, CoelacanthusHex, frank-xjh, Great-designer, greyqz, henrytbtrue, kZime, lihaoyu1234, Marcythm, Menci, nalemy, orzAtalod, ouuan, Persdre, segment-tree, ShaoChenHeng, Struggler-q, yuhuoji, ksyx, Pinghigh, shawlleyw, TrisolarisHD, TrisolarisHD 本页面的全部内容在CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用