欧拉函数定义:ϕ(i)=1~i中与i互质的数的个数。
欧拉函数的性质:
1.用中国剩余定理可以证明当a,b互质时,ϕ(ab)=ϕ(a)*ϕ(b),也就是欧拉函数满足积性函数的性质。
2.设p为一个质数,L为正整数,则ϕ(pL)=pL-pL−1
证明:∵p为质数,∴1~pL中与pL互质的数为不含p这个因子的数,也就是pL-含p这个因子的数的个数即为答案,那么1~pL中含p这个因子的数的个数即为pL−1,∴ϕ(pL)=pL-pL−1
由此可得,ϕ(i)=n∏si=11−1pi
其中n=∑si=1ptii
但该做法的复杂度为O(nlogn),我们可以做的更快。
显然ϕ(i)=i-1(i为质数)。
当i为合数时,设y*p=i,p是质数。若y%p!=0,则y和p互质,ϕ(i)=ϕ(y)ϕ(p),即ϕ(i)=ϕ(y)(p-1)
若y%p==0,则令y=pkw,其中w与p互质,则i=pk+1*w,ϕ(i)=ϕ(pk+1)ϕ(w)=(pk+1-pk)ϕ(w)=p
于是在线性筛中我们可以求出1~n中所有的欧拉函数。
欧拉函数的应用:
BZOJ2705
题目大意:给定一个整数N,你需要求出∑Ni=1gcd(i,N)。
题解:
枚举gcd(i,N)等于多少我们可以O(2*N√)枚举所有的gcd(i,N),设其为d,显然一个d的贡献为d*ϕ(N/d),于是我们只要求出每个d和N/d对应的phi即可,时间复杂度:O(N√log2N),空间复杂度:O(1)
BZOJ2818
题目大意:给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对.
题解:与上一题差不多,我们枚举每一个d,d为素数,则gcd(x,y)=1(1<=x,y<=N/d)的数的个数之和即为答案
而gcd(x,y)=1(1<=x,y<=N/d)的数的个数之和即为∑N/di=1ϕ(i)*2-1
BZOJ2190
题目大意:一个n*n的矩阵,一个人站在(1,1),求他能看到的总人数(斜率相同的只能看到一个人)
题解:
若将该人放到(0,0),显然除了(0,1)和(1,0)能被看到以外,只有坐标为(x,y),gcd(x,y)=1的人才能被看到。
证明:若gcd(x,y)≠0,则(x/gcd(x,y),y/gcd(x,y))已经被看到了,且这两人在同一斜率的直线上。
于是就跟上面的解法相同了。
BZOJ2186
题目大意:求1~N!中与M!互质的数的个数(M<=N,N<=1e7)。
题解:
∵gcd(x,y)=gcd(x+y,y),∴当gcd(x,M!)=1时,gcd(x+M!,M!)=1,∴1~N!中有M!N!ϕ(M!)个与M!互质的数,ϕ(M!)可以用ϕ(M!)=M!∏si=11−1pi来求,整理得N!∏si=11−1pi,N!可以预处理,∏si=11−1pi可以预处理,之后就O(1)回答每个问题即可。
欧拉函数的性质及应用
最新推荐文章于 2023-12-05 13:15:39 发布