整数拆分可以用dp写,O(n^2)
hdu4651和hdu4658给的范围是10^5,需要用到母函数和五边形数定理。
1)整数拆分的母函数表示:
p(k) 表示把k拆分的方案数。
利用等比数列求和公式,
2)五边形数定理
五边形数定理是一个由欧拉发现的数学定理,描述欧拉函数展开式的特性[1] [2]。欧拉函数的展开式如下:
亦即
3)
用Q(x)表示
有 G(x)*Q(x) = 1
即
比较两边的系数可知:
对于x^2, 系数为 1*p(2)-1*p(1)-1*1 = 0
对于x^4, 系数为 1*p(4)-1*p(3)-1*p(2) = 0
对于x^7, 系数为 1*p(7)-1*p(6)-1*p(5)+1*p(2)+1*1 = 0
由这个规律可递推求出p(x).