定义:
对正整数,欧拉函数是小于等于的数中与互质的数的数目,又称函数。例如。
引理:
- 如果为某个素数,则。
- 如果为某个素数的幂次。
- 函数为积性函数。
- 设为正整数的素数幂乘积表达式,则:。
证明都不难,自己推一推吧。
由引理1,2,3,我们不难可以想到怎么对欧拉函数进行线性筛。代码如下:
int n,m,cnt,ans,x,y,phi[N],prm[N],vis[N];
void init(){
phi[1]=1;
for(int i=2;i<N;i++){
if(!vis[i]){
prm[cnt++]=i;
phi[i]=i-1;
}
for(int j=0,k=prm[0]*i;j<cnt&&k<N;j++,k=prm[j]*i){
vis[k]=1;
if(!(i%prm[j])){
phi[k]=phi[i]*prm[j];
break;
}
phi[k]=phi[i]*phi[prm[j]];
}
}
return;
}
给几道题:
【POJ3090】Visible Lattice Points
【bzoj4804】欧拉心算
欧拉定理:
若与互质,则。
在证明这个定理之前,我们要先证明另外两个东西:
1.若,则。
证明:
设
不难发现当时,
2.对于任意的,不存在两个数,使得。这个很简单,留给大家自己去想一想吧。
接下来我们来证明一下欧拉定理。
证明:
设集合,。
又
不难得到
又
扩展欧拉定理
当时,
令,
由欧拉定理可得:
当时显然。
当时,
emmm......
去orz一下yww吧。
来两道题:
【bzoj3884】上帝与集合的正确用法
【bzoj4869】[Shoi2017]相逢是问候
一个重要的性质:
证明:
设为正整数的素数幂乘积表达式。
不难想到,
这个性质在利用杜教筛求函数的前缀和时非常重要。
差不多就这样啦。
再来道题:
【bzoj3518】点组计数
如果有误在评论区吼一声哦!