数学作业,要求我们写一篇数学读物的观后感(zzsz,OI-Wiki 他也是一本读物,对吧?)
在这个寒假,我在网上阅读了 OI-Wiki 的数学数论部分(Link:https://oi-wiki.org/math/),对此深有感悟,因此来写一篇观后感。
注:本文可能有些地方不严谨,因此如果错误请您谅解。
贝尔数
贝尔数又称作集合划分计数,oeis 中 有此记录(Link:https://oeis.org/A000110)。
问题 求有多少种划分基数为 \(n\) 的集合的方法。
贝尔数的定义如上所述,上面这个问题的答案即为 \(B_n\),第 \(n\) 个贝尔数。
那么我们尝试来求解贝尔数。
一个一个元素分开考虑,假设我们要分的集合是集合 \(S\),他的元素分别为 \(\{s_1,s_2,\cdots,s_t\}\)(\(t\) 即为 \(|S|\)),那么考虑将新的元素 \(s_{t+1}\) 加入到这个集合时,对集合 \(S\) 划分个数的影响即为:
- 当 \(s_{t+1}\) 被单独划分时,剩下 \(n\) 个元素可以任意划分,套上贝尔数的定义,对答案的贡献即为:
\[\binom n n B_t
\]
- 当 \(s_{t+1}\) 与 \(1\) 个元素划分到一块时,剩下 \(n-1\) 个元素可以任意划分,对答案的贡献即为:
\[\binom n{n-1} B_{t-1}
\]
- ……
- 当 \(s_{t+1}\) 与 \(k\) 个元素划分到一块时,剩下 \(n-k\) 个元素可以任意划分,对答案的贡献即为:
\[\binom n{n-k} B_{t-k}
\]
如果我们把反过来的再正过来归纳为一个式子的话,那么 \(B_n\) 的推导结果也就出来了:
\[B_n=\sum\limits_{i=0}^n \binom n i B_i
\]
根据定义,\(B_0=1\),因为划分一个基数为 \(0\) 的集合只有一种方式。
OI-Wiki 上还介绍了一种神奇的通过构建 Bell Triangle 的方式来求贝尔数。
Bell Triangle 类似杨辉三角,假设第 \(i\) 行第 \(j\) 列的数为 \(b_{i,j}\),那么构建 Bell Triangle 的方式是:
- \(b_{1,1}=1\),\(b_{n,1}=b_{n-1,n-1}\ (n>1)\)。
- \(b_{n,m}=b_{n,m-1}+b_{n-1,m}\ (m,n > 1)\)。
第一列的数即为贝尔数。
类欧几里得算法
类欧几里得算法致力于解决直线下整点个数问题,这种问题又能转化为一个固定的式子模式。
问题 1 给定 \(n,a,b,c\),求 \(f(n,a,b,c)\),其中 \(f\) 函数定义为:
\[f(n,a,b,c)=\sum\limits_{i=0}^n \left\lfloor\dfrac{ai+b}{c}\right\rfloor
\]
首先介绍一种 升维转换,比如说对于下面这个求和:
\[\sum\limits_{i=1}^n p(i)
\]
当我们发现这个式子很难求的时候,可以把 \(p(i)\) 单独作为一维进行升维,即:
\[\sum\limits_{i=1}^n\sum\limits_{j=1}^{p(i)}1
\]
那么我们将 \(f\) 函数也这么代入:
\[\begin{aligned}f(n,a,b,c)&=\sum\limits_{i=0}^n\sum\limits_{j=0}^{\left\lfloor\frac{ai+b}{c}\right\rfloor-1}1\end{aligned}
\]
然后我们将其进行 限制转换(又称 放缩),限制转换就是说比如说你有下面这个求和式子:
\[\sum\limits_{i=1}^n\sum\limits_{j=1}^i p(i,j)
\]
第二个求和有一个隐藏限制就是 \(j \le i\)。
那么当我们交换两个求和时:
\[\sum\limits_{j=1}^n\sum\limits_{i=1}^n p(i,j)
\]
这个值就肯定和原来的值不相同,因为 \(j\) 的限制从 \(j \le i\) 变成了 \(j \le n\),因此如果想让上面两个式子相等,需要加一步进行限制:
\[\sum\limits_{j=1}^n\sum\limits_{i=1}^n p(i,j)\times[j \le i]
\]
那么我们也将我们化简后的式子如此代入一下:
\[=\sum\limits_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}\sum\limits_{i=0}^n\ \left[j<\left\lfloor\dfrac{ai+b}{c}\right\rfloor\right]
\]
我们把限制条件 \(j<\left\lfloor\dfrac{ai+b}{c}\right\rfloor\) 尝试进行一下推导:
\[\begin{aligned}j<\left\lfloor\dfrac{ai+b}{c}\right\rfloor&\to j+1 \le \left\lfloor\dfrac{ai+b}{c}\right\rfloor\\&\to j +1 \le \dfrac{ai+b}{c}\\&\to jc+c \le ai+b\\&\to jc+c-b-1 < ai\\&\to \left\lfloor\dfrac{jc+c-b-1}{a}\right\rfloor<i\end{aligned}
\]
将限制条件代入原式继续化简(即试着把第二个循环处理掉):
\[\begin{aligned}\sum\limits_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}\sum\limits_{i=0}^n\ \left[\left\lfloor\dfrac{jc+c-b-1}{a}\right\rfloor<i\right]&=\sum\limits_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}n-\left\lfloor\dfrac{jc+c-b-1}{a}\right\rfloor\\&=n\left\lfloor\dfrac{an+b}{c}\right\rfloor-f\left(\left\lfloor\frac{an+b}{c}\right\rfloor,c,c-b-1,a\right)\end{aligned}
\]
回观原来的式子,我们需要用 \(\mathcal O(n)\) 的时间复杂度求解,然而这个我们只需要用 \(\mathcal O(\log n)\) 的时间复杂度求解即可。
问题 2 给定 \(n,a,b,c\),求 \(f_1(n,a,b,c),f_2(n,a,b,c)\),其中 \(f_1,f_2\) 函数定义为:
\[f_1(n,a,b,c)=\sum\limits_{i=0}^ni\left\lfloor\dfrac{ai+b}{c}\right\rfloor
\]
\[f_2(n,a,b,c)=\sum\limits_{i=0}^n\left\lfloor\dfrac{ai+b}{c}\right\rfloor^2
\]
为了方便,\(k_1=\left\lfloor\dfrac{an+b}{c}\right\rfloor\),\(k_2=\left\lfloor\dfrac{ai+b}{c}\right\rfloor\),\(k_3=\left\lfloor\dfrac{jc+c-b-1}{a}\right\rfloor\)。
因为上面已经把具体步骤说的比较详细明白了,所以此处只把推导的结果给出。
\(f_1\) 的推导过程:
\[\begin{aligned}\sum\limits_{i=0}^ni\left\lfloor\dfrac{ai+b}{c}\right\rfloor & =\sum\limits_{j=0}^{k_1-1}\sum\limits_{i=0}^n\ (j<k_2)\ i\\& = \sum\limits_{j=0}^{k_1-1}\sum\limits_{i=0}^n\ (i>k_3)\ i\\& = \sum\limits_{j=0}^{k_1-1}\sum\limits_{i=k_3+1}^n\ i\\& =\sum\limits_{j=0}^{k_1-1}\sum\limits_{i=1}^n\ i\ -\ \sum\limits_{i=1}^{k_3}i\\&=\sum\limits_{j=0}^{k_1-1}\dfrac{1}{2}n(n+1)\ -\ \dfrac{1}{2}k_3(k_3+1)\\& =\dfrac{1}{2}\left[k_1n(n+1)-\sum\limits_{j=0}^{k_1-1}k_3^2-\sum\limits_{j=0}^{k_1-1}k_3\right]\\& =\dfrac{1}{2}[k_1n(n+1)-f_2(k_1-1,c,c-b-1, a)-f(k_1-1,c,c-b-1,a)]\end{aligned}
\]
\(f_2\) 的推导过程:
\[\begin{aligned}\sum\limits_{i=0}^n\left\lfloor\dfrac{ai+b}{c}\right\rfloor^2&=\sum\limits_{i=0}^n\left[\left(2\sum\limits_{j=1}^{k_2}j\right)-k_2\right]\\&=\left(2 \sum\limits_{i=0}^n\sum\limits_{j=1}^{k_2}j\right)-f(n,a,b,c)\\&=\left[2\left(\dfrac{1}{2}nk_1(k_1+1)-\sum\limits_{j=0}^{k_1-1}(j+1)k_3\right)\right]-f(n,a,b,c)\\&=nk_1(k_1+1)-2f_1(k_1-1,c,c-b-1,a)-2f(k_1-1,c,c-b-1,a)-f(n,a,b,c)\end{aligned}
\]
\(f_2\) 的推导有一个公式需要使用:
\[\begin{aligned}n^2&=2 \times \dfrac{n(n+1)}{2} -n\\&=\left(2 \sum\limits_{i=0}^ni\right)-n\end{aligned}
\]
至此,\(f,f_1,f_2\) 的公式已推导完毕,这即为类欧几里得算法的具体内容(这三个函数可以互相递归,\(\mathcal O(\log n)\) 的时间复杂度),当然有一个拓展形式:
问题 3 给定 \(n,a,b,c,u,v\),求 \(f_3(n,a,b,c,u,v)\),其中 \(f_3\) 函数定义为:
\[f_3(n,a,b,c,u,v)=\sum\limits_{i=0}^ni^u\left\lfloor\dfrac{ai+b}{c}\right\rfloor^v
\]
这个内容需要用万能欧几里得算法进行解决,笔者实力 & 时间有限,因此只介绍到这里。
Thanks for Watching!!