sqrt(n)求解莫比乌斯函数值,如果把素数筛出来会使求解莫比乌斯函数更快。
ll getmu(ll n)
{
ll v=1;
for(int i=2;i*i<=n;i++)
if(n%i==0)
{
v=-v;n/=i;
if(n%i==0)return 0;
}
if(n!=1)v=-v;
return v;
}
o(n)递推的求解莫比乌斯函数值
int isprime[maxn],mu[maxn],prime[maxn];
void mobius(){
int cnt=0;
mu[1]=1;
for(int i=2;i<maxn;i++)
{
if(!isprime[i]){
prime[cnt++]=i;
mu[i]=-1;
}
for(int j=0;j<cnt&&i*prime[j]<maxn;j++)
{
isprime[i*prime[j]]=1;
if(i%prime[j])
mu[i*prime[j]]=-mu[i];
else
{
mu[i*prime[j]]=0;
break;
}
}
}
}