容斥原理
二进制位枚举遍历所有情况,时间复杂度O(2^n)
for(int i=1;i<(1<<n);++i)
{
int mid=i,j=0;
while(mid)
{
if(mid&1)
{
}
j++;
mid>>=1;
}
}
Mobius函数
与质数组合有关的容斥问题,可以利用Mobius函数O(N)枚举.n的质因数幂指数大于1,u(n)=0;否则如果n的质因数个数为偶数,u(n)=1;否则如果n的质因数个数为奇数,u(n)=-1.
void prime(int x)//线性筛O(N)递推求mobius函数
{
for(int i=2;i<=x;++i)
{
if(!s[i])
{
p[con++]=i;
mobius[i]=-1;
}
for(int j=0;p[j]*i<=x;++j)
{
s[p[j]*i]=1;
if(i%p[j]==0)
{
mobius[i*p[j]]=0;
break;
}
mobius[i*p[j]]=mobius[i]*-1;
}
}
}