容斥原理是一种重要的组合数学方法,可以让你求解任意大小的集合,或者计算复合事件的概率。
前置技能:莫比乌斯反演(懵逼钨丝)
注:1).d是n的约数
2)
在线性筛模板里处理莫比乌斯函数即可
int mobi[N]={0,1},num[N],prim[N],cnt=0;
void set()
{
for(int i=0;i<N;i++) num[i]=1;
for(int i=2;i<N;i++)
{
if(num[i])
{
prim[cnt++]=i;
mobi[i]=-1;
}
for(int j=0;j<cnt&&prim[j]*i<N;j++)
{
num[prim[j]*i]=0;
if(i%prim[j]==0)
{
mobi[prim[j]*i]=0;break;
}
mobi[prim[j]*i]=-mobi[i];
}
}
}
附上两道例题
1.