AcWing算法提高课 容斥原理
容斥原理的复杂度是2^n,一般n不会很大
形如:
由于容斥原理一共有2^n中选法,可以用二进制枚举,1表示选择某个条件。
然后将偶数个1的状态加起来,奇数个1的状态减去
例题:
https://www.acwing.com/problem/content/216/
莫比乌斯函数:
定义:
用于结合容斥原理求和n互质的数的个数
其中,莫比乌斯函数就是Si的系数
求法:(筛质数的时候直接处理)
模板:
void Init(int n) { mobius[1]=[1]; for(int i=2;i<=n;i++) { if(!not_primes[i]) { primes[cnt++]=i; mobius[i]=-1; } for(int j=0;primes[j]*i<=n;j++) { not_primes[primes[j]*i]=true; if(i%primes[j]==0) { mobius[i*primes[j]]=0;//至少存在两个primes[j]因子 break; } else { mobius[i*primes[j]]=mobius[i]*-1//i*primes[j]比i多一个质因子 } } } }
数学知识:
利用上图的g(x),可以求得[a/x](下取整)的同样值的数量(一共小于2sqrt(a)个)
此数量(每一跳就是g(x))
例题:https://www.acwing.com/problem/content/description/217/