莫比乌斯全家桶
ll prime[maxn],mob[maxn],vis[maxn],cnt;
void Mobius(){
memset(prime,0,sizeof(prime));
memset(mob,0,sizeof(mob));
memset(vis,0,sizeof(vis));
mob[1] = 1;
cnt = 0;
for(ll i = 2;i < maxn; i++){
if(!vis[i]){
prime[cnt++] = i;
mob[i] = -1;
}
for(ll j = 0;j < cnt&&i*prime[j] < maxn;j++){
vis[i*prime[j]] = 1;
if(i%prime[j]) mob[i*prime[j]] = -mob[i];
else{
mob[i*prime[j]] = 0;
break;
}
}
}
}