容斥原理

Posted linearode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容斥原理相关的知识,希望对你有一定的参考价值。

容斥原理

(S_1,S_2,cdots,S_n)为有限集,(|S|)表示集合(S)的大小,则:
[ left | igcup_{i=1}^nS_i ight |=sum_{i=1}^n|S_i|-sum_{1leq i <j leq n}|S_i cap S_j|+sum_{1leq i<j<k leq n}|S_i cap S_j cap S_k|+cdots ]
[ +(-1)^{n+1}|S_1cap cdots cap S_n| ag{1} ]

[ left | igcap_{i=1}^nS_i ight |=sum_{i=1}^n|S_i|-sum_{1leq i <j leq n}|S_i cup S_j|+sum_{1leq i<j<k leq n}|S_i cup S_j cup S_k|+cdots ]
[ +(-1)^{n+1}|S_1cup cdots cup S_n| ag{2} ]

这个式子也可以这样写:
[ left | igcup_{i=1}^nS_i ight |=sum_{T subseteq {1,2,cdots,n}}(-1)^{|T|+1}left | igcap_{kin T}S_k ight | ag{3} ]
[ left | igcap_{i=1}^nS_i ight |=sum_{T subseteq {1,2,cdots,n}}(-1)^{|T|+1}left | igcup_{kin T}S_k ight | ag{4} ]

虽然这样的写法看起来不那么严谨,而且也没有优雅多少,但是它还是反应了问题的本质。所谓容斥原理,就是几个集合的加加减减,把多计算的减去,把多减的加回来。

回顾我们学过的欧拉函数的表达式,我们现在可以解决它了。
[varphi(n)=|{i=1,2,cdots,n mid not i}|]
注意到对于(n)的一个正因子(z>1)(1)~(n)中含有(frac{n}{z})(z)的倍数。这(frac{n}{z})个数(x)(n)(gcd(n,x)=z),可以构成一个集合({x})。定义这个集合叫做(z)(n-)限制约数集,简称(z)的约数集
对于(gcd(x,n)=z_1z_2)的集合({x}),可以看成是原来(z_1,z_2)对应的约数集做一个交集。(z_1,z_2)的约数集的交集是(z_1z_2)的约数集,大小是(frac{n}{z_1z_2})。多个数也是同理。

([1,n])中和(n)不互质的数可以由(n)各正因子的约数集通过并集得到,由容斥原理:
[ |{i=1,cdots,n | gcd(n,i)>1}|=sum_{T subseteq {p_1,cdots,p_k},T eq varnothing}(-1)^{|T|+1}dfrac{n}{prod_{cin T}c} ]

其中(p_i)(n)的质因子。

由减法原理,从(1,cdots,n)中除去上面的所有数,就得到了我们想要的集合。它的大小是:
[ n-sum_{T subseteq {p_1,cdots,p_k},T eq varnothing}(-1)^{|T|+1}dfrac{n}{prod_{cin T}c} ]
[ =(-1)^{0}dfrac{n}{1}+sum_{T subseteq {p_1,cdots,p_k},T eq varnothing}(-1)^{|T|}dfrac{n}{prod_{cin T}c} ]
[ =nsum_{T subseteq {p_1,cdots,p_k}}prod_{c in T}(-dfrac{1}{c}) ]
[ =nprod_{i=1}^{k}{(1-dfrac{1}{p_i})} ]

我们也得到了欧拉函数的表达式:
[ varphi(n)=nprod_{ ext{prime }p | n}(1-frac{1}{p}) ag{5} ]

其中从第三步推到第四步用了一个展开的公式:
[prod_{i=1}^{n}(1+b_i)=sum_{Tsubseteq {b_1,cdots,b_n}}prod_{cin T}c]

这里可以找到有关的更多内容。

以上是关于容斥原理的主要内容,如果未能解决你的问题,请参考以下文章

容斥原理

容斥原理

「总结」容斥原理

容斥原理

容斥原理--题

容斥原理学习笔记