φ(m)
表示不大于m中与m互素的数的个数
显然 φ(p)=p-1 。
积性函数
f(x)有性质:对任意互质整数m和n ,有f(mn
)=f(m)*f(n)
(完全积性函数:对于任意整数都有上式成立)
❤φ(m)是一个积性函数!!
线性筛求欧拉函数
通过这个性质我们得到了欧拉函数的求解方法:
int getphi(int n){
int m=sqrt(n+0.5);
int ans=n;
for (int i=2;i<=m;i++){
if (n%i ==0 ){
ans=ans/i*(i-1);
while (n%i == 0) n/=i;
}
}
if (n>1) ans=ans*n*(n-1);
return ans;
}
以及线性求1~n欧拉函数值
int tot=0;
int phi[maxn],prime[maxn];
bool isPrime[maxn];
void getphi(){
mem(isPrime,true);//宏
phi[1]=1;
for(int i=2;i<=maxn;i++){
if(isPrime[i]) prime[++tot]=i,phi[i]=i-1;//*
for(int j=1;j<=tot;j++){
if(i*prime[j]>maxn) break;
isPrime[i*prime[j]]=false;
if(i%prime[j]==0){
//如果pt不是在ipt中第一次出现的话(也就是pt整除i)
phi[i*prime[j]]=phi[i]*prime[j];
break;
}else
//如果pt是在ipt中第一次出现的话(也就是pt不整除i)
phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
}
费马小定理: