内容较多,建议使用目录
容斥原理
集合的并集
设 A1,A2...,An 是有限集合,则
|A1⋃A2⋃…⋃An|=∑ni=1|Ai|−∑ni=1∑j>i|Ai⋂Aj|−∑ni=1∑j>i∑k>j|Ai⋂Aj⋂Ak|…+(−1)n|A1⋂A2⋂…⋂An|
Sylvester公式
给定集合N和具有性质i的集合 A1,A2...,An ,则
|A⎯⎯⎯1⋂A⎯⎯⎯2⋂…⋂A⎯⎯⎯n|=|N|−(∑ni=1|Ai|−∑ni=1∑j>i|Ai⋂Aj|…+(−1)n|A1⋂A2⋂…⋂An|)
[列题] 区间(S,E]中与n互质的元素个数
设 Ai 为n的第i个质因子 pi 的倍数的集合且 Ai⊆(S,E],i=1,2,3…k ,那么 |Ai|=[Epi]−[Spi],|Ai⋂Aj|=[Epipj]−[Spipj]… ,然后套用上面公式即可解决问题了。关键是将这个公式表达出来,有没有发现一共有 2n 项多项式,而且组合数量为奇数时负,组合数量为偶数时符号为正。
LL POIAE(int n,int S,int E){
//质因子分解
int p[32],u=0;
for(int i=2;i*i<=n;i++)
if(n%i==0){
p[u++]=i;
while(n%i==0) n/=i;
}
if(n>1) p[u++]=n;
LL qua=0;
for(int i=1;i<1<<u;i++){
int cnt=0,com=1;
for(int k=0;k<u;k++)
if(i>>k&1) cnt++,com*=p[k];
qua+=cnt&1?E/com-S/com:-E/com+S/com;
}
return E-S-qua;
}
欧拉函数φ(n)
欧拉函数φ(n) 是小于等于n且与n互素的正整数的个数,假设 n=pα11pα22pα33…pαkk ,则有
证明:
设 Ai 为1到n之间 pi 的倍数的集合,i=1,2,3,…,k,则
φ(n)= |A⎯⎯⎯1⋂A⎯⎯⎯2⋂…⋂A⎯⎯⎯k|
= |N|−(∑ki=1|Ai|−∑ki=1∑j>i|Ai⋂Aj|…+(−1)k|A1⋂A2⋂…⋂Ak|)
= n−(∑ki=1npi−∑ki=1∑j>inpipj+∑ki=1∑j>i∑h>jnpipjph…+(−1)knp1p2p3…pk)
= n(1−1p