Lucas,鸽巢与错排
Lucas定理
定理公式
\(p\) 为素数时:
定理证明
先证明两个引理:
-
\(p\) 为素数时,\(\binom{i}{p}\equiv0\pmod{p}\)。
-
\(p\) 为素数时,\((1+x)^p\equiv1+x^p\pmod{p}\)。
证明 1:
易得 \(\binom{i}{p}=\frac{p!}{i!\cdot(p-i)!}\)。
因为 \(p\) 为素数,所以分子中的 \(p\) 一定不会被分子约掉,则 \(\binom{i}{p}\) 为 \(p\) 的倍数。
证明 2:
把 \((1+x)^p\) 二项式展开,得:
当 \(i=1\sim p-1\) 时,又引理 1 可得 \(\binom{p}{i}\equiv 0\pmod{p}\)。
则 \((1+x)^p\equiv 1+x^p\pmod{p}\)。
现在来证明原定理。
首先,对于 \((1+x)^n\),\(\binom{n}{m}\) 就是其指数为 \(x^m\) 项的系数。
化简 \((1+x)^n\) 得:
显然,左半部分只能提供 \(x^{kp}\) 项,右半部分只能提供 \(x\) 的小于 \(p\) 次方项,则要求 \(x^m\) 系数,左半部分提供 \(x^{p\cdot(n/p)}\) 的系数,即 \(\binom{n/p}{m/p}\),右半部分提供 \(x^{n\%p}\) 的系数,即 \(\binom{n\%p}{m\%p}\),而原本 \(x^m\) 系数为 \(\binom{n}{m}\),则得到:
错排
错排公式
记 \(f_n\) 表示长度为 \(n\) 的错排个数。
则:
错排例题
-
更简单的排列计数
记 \(cyc_{\pi}\) 表示把排列 \(\pi\) 看成置换,其中环的个数。
给定 \(n,k\) 和多项式 \(F\),对 \(1\le m\le n\) 求 \(\sum\limits_{\pi}F(cyc_{\pi}) \),其中 \(\pi\) 为错排。
sol:
\(\begin{aligned}\sum\limits_{\pi}F(cyc_{\pi})&=\sum\limits_{\pi}\sum\limits_{i=0}^{k-1}f_icyc_{\pi}^i\\&=\sum\limits_{\pi}\sum\limits_{i=0}^{k-1}f_i\sum\limits_{j=0}^i\begin{Bmatrix} i \\j \end{Bmatrix}\binom{cyc_{\pi}}{j}j!\\&=\sum\limits_{\pi}\sum\limits_{i=0}^{k-1}\sum\limits_{j=0}^if_i\begin{Bmatrix} i \\j \end{Bmatrix}\binom{cyc_{\pi}}{j}j!\\&=\sum\limits_{\pi}\sum\limits_{j=0}^{k-1}\sum\limits_{i=j}^{k-1}f_i\begin{Bmatrix} i \\j \end{Bmatrix}\binom{cyc_{\pi}}{j}j!\\&=(\sum\limits_{j=0}^{k-1}j!)(\sum\limits_{\pi}\binom{cyc_{\pi}}{j})(\sum\limits_{i=j}^{k-1}f_i\begin{Bmatrix} i \\j \end{Bmatrix})\end{aligned}\)
记 \(c_{t,i}\) 表示 \(|\pi|=t\) 且 \(cyc_{\pi}=i\) 的错排 \(\pi\) 个数。
考虑递推,设 1 在序列中的位置为 \(k\),分两种情况:
-
k 的位置为 1,此时有 \(c_{t-2,i-1}\) 种情况。
-
k 的位置不为 1,此时有 \(c_{t-1,i}\) 种情况。
这里其实和错排的递推差不多。
而 \(k\) 有 \(t-1\) 种选法,则 \(c_{t,i}=(t-1)(c_{t-2,i-1}+c_{t-1,i})\)。
又记 \(p_{t,i}\) 表示 \(\sum\limits_{|\pi|=t}\binom{cyc_{\pi}}{i}\) 的值。
将式子转换为枚举 \(cyc_{\pi}\),可得:
\(\begin{aligned}p_{t,i}&=\sum\limits_{j=1}^t\binom{j}{i}c_{t,j}\\&=\sum\limits_{j=1}^t\binom{j}{i}(t-1)(c_{t-2,j-1}+c_{t-1,j})\\&=(t-1)\sum\limits_{j=1}^t\binom{j}{i}(c_{t-2,j-1}+c_{t-1,j})\\&=(t-1)[\sum\limits_{j=1}^t\binom{j}{i}c_{t-2,j-1}+\sum\limits_{j=1}^t\binom{j}{i}c_{t-1,j}]\\&=(t-1)[\sum\limits_{j=1}^t[\binom{j-1}{i}c_{t-2,j-1}+\binom{j-1}{i-1}c_{t-2,j-1}]+\sum\limits_{j=1}^t\binom{j}{i}c_{t-1,j}]\\&=(t-1)(p_{t-2,i}+p_{t-2,i-1}+p_{t-1,i})\end{aligned}\)
而由于 \(t\le n,i<k\),则 \(p\) 数组可以在 \(O(nk)\) 时间复杂度内递推处理。
再看求得的答案式子:
我们发现:前面一部分和后面一部分可以 \(O(k^2)\) 预处理,中间一部分已经被 \(O(nk)\) 递推,则枚举要计算的 \(m\),式子就能 \(O(1)\) 算了。
鸽巢原理
鸽巢原理公式
将 \((\sum\limits_{i=1}^np_i)−n+1\) 个物品放入 \(n\) 个盒子,一定存在一个盒子 \(i\),使
得第 \(i\) 个盒子至少装了 \(p_i\) 个物品。
鸽巢原理例题
-
有十个数 \(a_1,a_2\cdots a_{10}\) 满足 \(\mathop{\forall}\limits_{1\le i\le 10}1\le a_i\le 60\),证明能够从 \(a_i\) 中挑出两个交为空的子集,使得它们的和相等。
sol:
首先发现交为空的条件没有用,因为如果找到两个和相等的子集,将它们相交的部分同时去掉,也不影响和相等。
观察到子集总数为 \(2^{10}=1024\) 大于和的总数 \(60\times 10=600\),则必有两个子集和相等。
-
证明一张有超过 1 个点的简单无向图必定有两点度数相等。
sol:
-
若存在两个及以上 0 度点,则成立。
-
若存在一个 0 度点,则剩余 \(n-1\) 个点的度数只能在 \([1,n-2]\) 中取,故一定有两点度数相等。
-
若不存在 0 度点,则 \(n\) 个点的度数只能在 \([1,n-1]\) 中取,故一定有两点度数相等
-
证明能从任意 11 个实数中取出 4 个满足:\((ac + bd)^2\ge \frac{1}{2}(a^2+b^2)(c^2+d^2)\)。
sol:
显然,存在 6 个实数同号,把这 6 个实数看成 3 个向量,因为这 3 个向量均在第一或第三象限,所以一定存在两个向量夹角小于等于 45 度,利用余弦定理得 \(\cos 45^\circ\ge \frac{ac+bd}{\sqrt{(a^2+b^2)(c^2+d^2)}}\),平方得 \(\frac{1}{2}\ge \frac{(ac+bd)^2}{(a^2+b^2)(c^2+d^2)}\),变形即可得到原式。

浙公网安备 33010602011771号