欧拉函数与欧拉定理

互质

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

欧拉函数

1N中与N互质的数的个数被称作欧拉函数,记为φ(N)

若在算数基本定理中,N=i=1mpici,则:

φ(N)=N×i=1mpi1pi=N×i=1m(11p)

p,qN是质因子,则1Np,q的倍数分别为Np,Nq个,根据容斥原理,N中同时是p,q倍数的个数为:

NNpNq+Npq=N(11p)(11q)

以此类推,得到欧拉函数的计算公式。

单个数字的欧拉函数值的计算代码:

int phi(int x){
	int res=x;
	for(int i=2;i<=sqrt(x);i++){
		if(x%i==0){
			res=res/i*(i-1);
			while(x%i==0)x/=i;
		}
	}
	if(x>1){
		res=res/x*(x-1);
	}
	return res;
}

积性函数

如果当a,b互质时,f(ab)=f(a)f(b),那么称f为积性函数

欧拉函数性质

  1. n>1,1n中与n互质的数的和为nφ(n)2

    因为gcd(n,x)=gcd(n,nx),所以与n不互质的数x,nx成对出现,平均值为n/2,因此得到与n互质的数的平均值为n/2,进而得到性质1。

  2. a,b互质,有φ(ab)=φ(a)φ(b)

    因为a,b互质,所以a,b没有相同的质因数,对a,b分解质因数,把φ(a),φ(b)展开相乘即可得到φ(ab)

  3. f为积性函数,且n=i=1mpici,那么f(n)=i=1mf(pici)

    根据积性函数的定义,显然有性质3。

  4. p是质数,若pnp2n,则φ(n)=φ(n/p)×p

    pn,p2n,可得n,n/p有相同的质因子且只有p的质数不同,把二者展开之后发现φ(n)φ(n/p)=p,所以性质4成立。

  5. p是质数,若pnp2n,则φ(n)=φ(n/p)×(p1)

    pnp2n,得pn/p互质,由性质2得φ(n)=φ(n/p)×φ(p),又由p是质数得φ(p)=p1,所以性质5成立。

  6. dnφ(d)=n

    f(x)=dxφ(d),若x,y互质,那么对于xy的每个约数z,都有唯一的a,b,使得ax,by,ab=z,所以,f(x)f(y)=(dxφ(d))×(dyφ(d))=dxyφ(d)=f(xy),所以f(x)是一个积性函数。由性质3得,f(n)=i=1mf(pici)=i=1mj=0ciφ(pij),因为j=1ciφ(pij)是一个等比数列求和再加1,所以j=1ciφ(pij)=1+(p1)pci(p1)p1=pci,带入f(n),得f(n)=i=1mf(pici)=i=1mpici=n,所以性质6成立。

线性筛求欧拉函数

由性质4和性质5得

  • pnp2n,则φ(n)=φ(n/p)×p

  • pnp2n,则φ(n)=φ(n/p)×(p1)

在线性筛中,每个合数数会被其最小的质因子所标记,所以我们可以利用这一性质进行递推,从φ(n/p)推到φ(n)

void euler(){
	phi[1]=1;
	for(int i=2;i<=maxn;i++){
		if(!fl[i]){
			cnt++,pr[cnt]=i;
			v[i]=i,phi[i]=i-1;
		}
		for(int j=1;j<=cnt&&pr[j]<=maxn/i;j++){
			if(pr[j]>v[i])break;
			fl[pr[j]*i]=true;
			v[pr[j]*i]=pr[j];
			phi[pr[j]*i]=phi[i]*(i%pr[j]==0?pr[j]:pr[j]-1);
		}
	}
	return;
}

费马小定理

p是质数,那么有:

ap1a (mod p)

欧拉定理

a,m互质,那么有:

aφ(m)1 (mod m)

扩展欧拉定理

ab={ab  b<mab mod φ(m)  gcd(a,m)=1ab mod φ(m)+φ(m) gcd(a,m)1 (mod m)

posted @   RYANGSJ  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示