前言
拆分数P(n),就是将n拆分成正整数的和的方案数。
朴素的做法应该是可以做到时空
但我们可以通过生成函数和正五边形数的方法来做到
其实可以看wiki
欧拉函数与五边形数定理
注意这并不是数论中的欧拉函数
定义
设拆分数的母函数
也就是
所以
但是知道了这一点还是很难做,于是我们需要一个五边形数定理
其中
不懂的可以看 这里
我们可以发现五边形数是O(n^2)级别的,也就是说我们用这个东西递推的复杂度就是
那么怎么证明呢?
如果觉得我讲的不好的可以看这里
考虑欧拉函数的第n项的系数代表的意义,就是把n拆成互不相同的偶数个正整数的方案数-把n拆成互不相同的奇数个正整数的方案数
考虑 n 的任意一种划分的 Ferrers 图(就是wiki里那种每一行小于上一行的图)
比如n=20时的一种:
0 0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0
0 0 0
设m为最下面一行的元素个数,s为最上面斜对角线的元素个数(这张图里m=3,s=2)
那么我们定义一种变换:
1’当m>s时,将这s个元素放到最后一行
例子中的图会变成
0 0 0 0 0 0
0 0 0 0 0
0 0 0 0
0 0 0
0 0
2’当m<=s时,将这m个元素依次放到前s行每一行的末尾
二次操作后的例子会变成
0 0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0
0 0 0
观察可以发现,这种变换会得到n的一种奇偶性不同的拆分,并且进行两次这种操作之后的图会变回原来的样子,也就是这种操作是可逆的。
那么我们可以发现,每一种偶数划分方案都唯一对应另一种奇数划分方案。
也就是x^n的系数本来应该为0才对,不过有些位置有值?
我们会发现上述的规律对于大多数n都使用,除了少数的特例:
1)m=s+1且s那条线与最后一行相遇
0 0 0 0 0 0
0 0 0 0 0
0 0 0 0
尝试操作之后我们得到
0 0 0 0 0
0 0 0 0
0 0 0
0 0 0
然而这样是不合法的。
这个东西对系数的贡献为(-1)^s
这样子的点的个数
2) m=s且s那条线与最后一行相遇
0 0 0 0 0
0 0 0 0
0 0 0
尝试操作之后我们会得到
0 0 0 0 0 0
0 0 0 0 0
0
奇偶性并没有发生改变,而是变成了另一个状态
这样对系数的贡献也是(-1)^s
点数
所以我们发现不合法的情况只有当n为某个广义正五边形数的时候会出现
而且这样的系数恰好为(-1)^s,其他情况都会奇偶抵消,等于等式右边。
Q.E.D