分拆数

把一个数拆为很多个非零数,让它们的和为这个数,有多少种拆法。似乎是一种比较常见的问题。
学习了两种分拆数,k部分拆数以及互异分拆数。
然而,由于AI的误导启发,可以证明出这两种分拆数实际上有一些数值上的直接联系。


先简单介绍一下两种分拆数


k部分拆数就是把一个数拆为 \(k\) 个部分,让它们的和为 \(n\),可以表示为 \(p(n, k)\)

\(p_n\)表示为自然数\(n\)的分拆方法数

初始化 \(p(0, 0) = 1\)
它的状态转移方程是 \(p(n, k) = p(n - k, k) + p(n - 1, k - 1)\)
\(k\) 个数里没有 \(1\) 的情况加上 \(k\) 个数里有 \(1\) 的情况


互异分拆数与k部分拆数的区别是这 \(k\) 个数互不相同,并且拆出的最小值大于等于 1
于是,状态转移方程是 \(pd(n, k) = pd(n - k, k) + pd(n - k, k - 1)\)
其中有 \(1\) 的情况变为了,所有数都减一,可以防止存在多个 \(1\)




不禁思考,如果一个互异分拆数从小到大排列

\[a_1, a_2, ..., a_k \]

它们具有互不相同,并且每个数都大于等于 1 的性质
若将 \(a_i\) 减去 \(i\),即数列变为 \(a_1 - 1, a_2 - 2, ..., a_k - k\)
得到的这个数列一定是一个k部分拆数,这个是很容易想到的
接下来,根据这两种分拆数的性质,可以写出这样的等式

\[pd(n, k) = p(n - k (k - 1) / 2, k) \]


例题
可以在这道题里验证一下,可以看到初始化出一个k部分拆数之后,仍然可以用上方等式的关系,替代得到互异分拆数
image

posted @ 2025-10-09 20:06  he_jie  阅读(9)  评论(0)    收藏  举报