欧拉函数

挺多,定理挺简单,证明复杂。

欧拉函数( φ

定义:

φ(x) 表示所有 x 的数中,与 x 互质的数的个数。

通式:

p1,p2,...,pn 表示 x质因数

则:

φ(x)=x×i=1npi1pi

证明:

首先,显然,一个数和 x 互质的充要条件是其不是 x 质因数的倍数。

所以我们考虑筛掉所有 x 的质因数的倍数。

随便找两个 x 的质因数 pi,pj ,考虑容斥,他们的倍数个数为:

xpi+xpjxpipj

所以剩下的个数为:

xxpixpj+xpipj

x×(11pi1pj+1pipj)

x×(11pi)(11pj)

同理筛去所有的即可得到通式。

也可以通过性质证明(具体性质见下:

设(将 x 分解质因数):

x=p1a1p2a2...pnan

其中:

p1,p2...pn质数

易知:

p1p2...pn

φ(x)=φ(p1a1)φ(p2a2)...φ(pnan)=(p1a1p1a11)(p2a2p2a21)...(pnanpnan1)=x(1p11)(1p21)...(1pn1)=x×i=1npi1pi

附:

x 内与 y 互质的数(要求 yx

x×i=1npi1pi

其中 py 的质因数集(推导类似欧拉定理通式推导)。

也可以写作:

xy×φ(y)

————做题时得到的类似通式扩展。

性质:

  1. x 为质数,则 φ(x)=x1

  2. x 为质数,则 φ(xk)=xkxk1

    1,2 结合定义显然

  3. φ 是积性函数

    对于任意互质x,yφ(xy)=φ(x)×φ(y)

  4. x 是奇数时 φ(2x)=φ(2)×φ(x)=φ(x)

  5. x(x>1) 以内所有与其互质的数的和 =φ(x)×x÷2

    证明:

    前置定理更相减损术,简单来说,就是 gcd(x,y)=gcd(x,xy)=gcd(xy,y)

    由这个公式可以知道,所有与 x 互质的数都是成对出现的,并且他们的和为 xy,xy )。

    因为共有 φ(x)÷2 组,所以他们的和为 φ(x)×x÷2

    同时由这个证明可得, φ(x)(x>2) 是偶数。

  6. x=axφ(a)

    证明,设 f(a)=iaφ(i)

    f(n)×f(m)=inφ(i)jmφ(j)=injmφ(ij)=knmφ(k)=f(nm) (gcd(n,m)=1)

    f 是积性函数

    f(pk)=φ(1)+φ(p)+φ(p2)+...+φ(pk)=pk (p 为质数)

    x=p1k1p2k2...pnkn

    f(x)=f(p1k1)f(p2k2)...f(pnkn)=p1k1p2k2...pnkn=x

线性筛求欧拉函数:

因为欧拉函数是积性函数,所以可以线性筛。

// npri 表示是否是质数(为1不是),pri存储质数,phi存储欧拉函数,x指通式中的x
inline void phi_sieve(int n){
npri[1]=1;phi[1]=1;
for(int i=2;i<=n;i++){
if(!npri[i]) phi[i]=i-1,pri[++ppri]=i;
for(int j=1;j<=ppri&&i*pri[j]<=n;j++){
npri[i*pri[j]]=1;
if(i%pri[j]==0){phi[i*pri[j]]=phi[i]*pri[j];break;}//phi[i]已经有质因数pri[j],只需要x扩大pri[j]即可。
phi[i*pri[j]]=phi[i]*phi[pri[j]];//phi 为积性函数,phi[i*pri[j]] = phi[i] * phi[pri[j]]
}
}
}

欧拉反演:

其实就是应用欧拉函数的性质 6

两个基础应用:

  1. i=1ngcd(i,n)

i=1ngcd(i,n)=i=1njgcd(i,n)φ(j)=i=1njijnφ(j)=jnφ(j)i=1n[ji]=jnφ(j)nj

  1. i=1nj=1ngcd(i,j)

i=1nj=1ngcd(i,j)=i=1nj=1nkgcd(i,j)φ(k)=i=1nj=1nkikjφ(k)=k=1nφ(k)i=1nj=1n[ki][kj]=k=1nφ(k)nk2

欧拉定理:

a,m 互质,则满足:

aφ(m)1(modm)

证明这篇博客讲的极其详细,不赘述。

扩展欧拉定理:

对于任意 a,m

ac{acmodφ(m)gcd(a,m)=1acgcd(a,m)1,c<φ(m)a(cmodφ(m))+φ(m)gcd(a,m)1,cφ(m)(modm)

证明极其复杂,这里不给出了,可以参考这篇博客

参考博客:

https://www.cnblogs.com/Morning-Glory/p/11106828.html

https://www.cnblogs.com/wangxiaodai/p/9758242.html (欧拉定理证明)

https://www.cnblogs.com/1024th/p/11349355.html (扩展欧拉定理证明)

posted @   5k_sync_closer  阅读(152)  评论(2编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示