码迷,mamicode.com
首页 > 其他好文 > 详细

容斥原理

时间:2019-04-13 10:57:34      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:而且   prim   容斥   展开   lin   写法   函数   回顾   解决   

容斥原理

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

\[ \left | \bigcap_{i=1}^nS_i \right |=\sum_{i=1}^n|S_i|-\sum_{1\leq i <j \leq n}|S_i \cup S_j|+\sum_{1\leq i<j<k \leq n}|S_i \cup S_j \cup S_k|+\cdots \]
\[ +(-1)^{n+1}|S_1\cup \cdots \cup S_n| \tag{2} \]

这个式子也可以这样写:
\[ \left | \bigcup_{i=1}^nS_i\right |=\sum_{T \subseteq \{1,2,\cdots,n\}}(-1)^{|T|+1}\left | \bigcap_{k\in T}S_k\right | \tag{3} \]
\[ \left | \bigcap_{i=1}^nS_i\right |=\sum_{T \subseteq \{1,2,\cdots,n\}}(-1)^{|T|+1}\left | \bigcup_{k\in T}S_k\right | \tag{4} \]

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

回顾我们学过的欧拉函数的表达式,我们现在可以解决它了。
\[\varphi(n)=|\{i=1,2,\cdots,n \mid n\bot 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 \neq \varnothing}(-1)^{|T|+1}\dfrac{n}{\prod_{c\in T}c} \]

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

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

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

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

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

容斥原理

标签:而且   prim   容斥   展开   lin   写法   函数   回顾   解决   

原文地址:https://www.cnblogs.com/LinearODE/p/10699953.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!