【汉化】筛分法

5 筛分法

筛分法本质上有两个变体。为确定一个集合的大小,我们会多算,然后从这个数中减去,再加上,再减去……直到元素的个数最终被精确确定。一个典例就是 容斥原理。 在第二个变体中,我们会通过合适的权重筛掉不想要的元素。这就是对合原理背后的本质思路。

5.1 容斥

考虑一个有限集 X 和三个子集 A,B,C. 要算出 |ABC|,我们会求和 |A|+|B|+|C|. 除非 A,B,C 互无交集,否则我们就多算了,因为 AB,AC,BC 被算了两次。所以我们减去 |AB|+|AC|+|BC|. 现在这个数就对了,除了 ABC 里的元素。他们被加上了三次,又被减去了三次。因此答案为

|ABC|=|A|+|B|+|C||AB||AC||BC|+|ABC|,

或者说,

|X(ABC)|=|X||A||B||C|+|AB|+|AC|+|BC||ABC|.

下面是通式。

使 A1,A2,,AnX 的子集,那么

|Xi=1nAi|=|X|i=1n|Ai|+i<j|AiAj|+(1)n|A1An|.(1)

为证明,我们检查一个元素 xX 被算重了几次。如果 xi=1nAi,那么它在方程的两边都算了一次。假设 xi=1nAi,更精确来说, x 恰好在 Aim 个中。方程左边为 0, 对右边,由于 m1, 我们由 (1)

1(m1)+(m2)(m3)±+(1)m(mm)=0.

由这个基本的解释可得容斥原理。假设给定一个集合 X 作为 论域,和一个属性集 E={e1,,en},X 可能有,也可能没有这些属性。使 Ai 为享有属性 ei(可能还有其他属性)的元素的集合。那么 |Xi=1nAi| 就是 拥有 任何 属性的元素的数量。现在考虑 (1) 右边的写法。显而易见,Ai1Ait 就是拥有属性 ei1,,eit (可能还有其他属性) 的集合。使用如下记法:

NT:=#{xX:x 至少拥有 T 中的属性},N=T:=#{xX:x 有且仅有 T 中的属性},(2)

我们得到了容斥原理。

容斥原理. 使 X 为一个集合,且 E={e1,,en} 为属性集。那么

N==TE(1)|T|NT=k=0n(1)kT:|T|=kNT.(3)

NT 只取决于集合大小 |T|=k 时,这个方程甚至会变得更简单。由于 |T|=k, 我们就可以写作 NT=Nk, 并称呼 E同质 属性集。我们马上可得在这种情况下 N=T=N=k 也只取决于 T 的势。因此对于同质属性集,有

N=0=k=0n(1)k(nk)Nk.(4)

例 1. 最早的例子聚焦于欧拉函数 φ=#{d:1dn,gcd(d,n)=1} 的计算。令 n=p1a1ptatn 的质因数分解。让 X={1,2,,n}ei 代表 d 整除 pi. 显而易见,N==φ(n),NTn 且是 eiTpi 的倍数的整数个数。因此 NT=neiTpi, 且由 (3)

φ(n)=ni=1tnpi+i<jnpipj+(1)tnp1pt=n(1i=1t1pi+i<j1pipj+(1)t1p1pt),

φ(n)=ni=1t(11pi).(5)

举个例子,对于 n=20=225,

φ(20)=201245=8.

小于 20 且与 20 互质的数有 1,3,7,9,11,13,17,19. (5) 暗示了当 mn 互质时 φ(mn)=φ(m)φ(n).

image
image
image

posted @   二两碘酊  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示