普通版原理:
(其中qi表示n小于等于n的约数)用均匀分布的特点和容斥定理易证
inline ll ola(ll n)
{
ll ans=n;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
ans=ans-ans/i;
while(n%i==0)n/=i;
}
}
if(n>1)ans=ans-ans/n;
return ans;
}
线性筛版原理:如果q是素数
,由于欧拉函数是积性函数,所以当(a,b)=1时有
bool bk[2100];
int pri[1100],tot,chi[2100];
inline void pre()
{
chi[1]=1;
memset(bk,true,sizeof(bk));
for(int i=2;i<=2000;i++)
{
if(bk[i])pri[++tot]=i,chi[i]=i-1;
for(int j=1;j<=tot,i*pri[j]<=2000;j++)
{
bk[i*pri[j]]=false;
if(i%pri[j]==0)
{
chi[i*pri[j]]=chi[i]*pri[j];
break;
}
chi[i*pri[j]]=chi[i]*chi[pri[j]];
}
}
}