Loading [MathJax]/jax/output/CommonHTML/jax.js

『欧拉函数与线性筛』

Parsnip·2019-04-10 19:18·462 次阅读

『欧拉函数与线性筛』

<更新提示>

<第一次更新>


<正文>

欧拉函数#

定义#

 a,bN,若gcd(a,b)=1,则称ab互质。

对于一个正整数n,我们将1n中与n互质的数的个数称为欧拉函数,记为ϕ(n)

求解#

若在算数基本定理中,有n=pa11pa22...pakk,则可以得到:

ϕ(n)=nki=1pi1pi

证明:
pn的一个质因子,则1np的倍数有p,2p,3p,...,npp,即1n中不含有因子p的数的个数为nnp个。
qn的另一个质因子,由容斥原理可得1n中不含有因子pq的数的个数为nnpnq+npq=n(p1p)(q1q)个。
推广到n的每一个质因子,可得1n中不与n含有任何共同质因子的数的个数为nki=1pi1pi个,即ϕ(n)=nki=1pi1pi

利用如上公式,我们可以直接在分解质因数的过程中求得一个数的欧拉函数,时间复杂度为O(n)

Code:

Copy
inline long long phi(long long x) { long long ans=x; for (long long 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; }

性质#

1.对于质数p,有ϕ(p)=p1

证明:由定义可得。

2. n>11n中与n互质的数的和为n2ϕ(n)

证明:
由于gcd(n,x)=gcd(n,nx),所以与n不互质的数nx,x成对出现,且平均值为n2,因此与n互质的数的平均值也为n2n互质的数的和即为n2ϕ(n)

3.gcd(a,b)=1,则ϕ(ab)=ϕ(a)ϕ(b)
4.欧拉函数是积性函数,即n=paiiϕ(n)=ϕ(paii)
5.对于一个质数p,若有p|n,p2|n,则ϕ(n)=ϕ(np)p
6.对于一个质数p,若有p|n,p2|n,则ϕ(n)=ϕ(np)(p1)

证明:
可以由欧拉函数的计算式直接推导得到。

7.d|nϕ(d)=n

证明:
设函数f(x)=d|nϕ(d),则f(nm)=d|nmϕ(d),若n,m互质,利用欧拉函数是积性函数可以得到:f(nm)=d|nmϕ(d)=d1|nd2|mϕ(d1d2)=d|nϕ(d)d|mϕ(d)=f(n)f(m)
即函数f为积性函数。

对于一个质数p,$$f(pm)=\sum_{d|pm}\phi(d)=\sum{m}_{i=0}\phi(pi)$$,由等差数列求和可得f(pm)=pm,即可得到$$f(n)=\prod_{i=1}{m}f(p_i)=\prod_{i=1}{m}p_i=n$$

这些性质在不同的题目中有不同的作用,需要我们注意灵活运用。特别是性质6.,在dirichlet卷积,Möbius反演中等内容中也会起到作用。

线性筛求解#

对于求解1n所有数的欧拉函数,如果直接使用分解质因数法,时间复杂度为O(nn)

事实上,我们可以利用欧拉函数的性质1. 5. 6.,再线性筛的求解过程中顺带地求解欧拉函数(线性筛见『素数 Prime判定和线性欧拉筛法 The sieve of Euler』)。

Code:

Copy
inline void eular(void) { for (int i=2;i<=n;i++) { if (!flag[i])Prime[++cnt]=i,phi[i]=i-1; for (int j=1;j<=cnt&&i*Prime[j]<=n;j++) { flag[ i*Prime[j] ] = true; if (i%Prime[j]==0) { phi[ i*Prime[j] ] = phi[i] * Prime[j]; break; } else phi[ i*Prime[j] ] = phi[i] * (Prime[j]-1); } } }

<后记>
感谢hzk 欧拉函数的介绍(附加欧拉定理和费马小定理的介绍)

posted @   Parsnip  阅读(462)  评论(0)    收藏  举报
编辑推荐:
· C23和C++26的#embed嵌入资源指南
· 「EF Core」框架是如何识别实体类的属性和主键的
· 独立开发,这条路可行吗?
· 我在厂里搞 wine 的日子
· 如何通过向量化技术比较两段文本是否相似?
阅读排行:
· 推荐 5 款实用的 Docker 可视化管理工具,工作效率翻倍!
· 瞧瞧别人家的接口重试,那叫一个优雅!
· 【EF Core】框架是如何识别实体类的属性和主键的
· MySQL 13 为什么表数据删掉一半,表文件大小不变?
· 上周热点回顾(7.7-7.13)
目录
点击右上角即可分享
微信分享提示