loj6268 分拆数 生成函数+多项式ln+多项式exp

Description


设f(n)表示正整数n的分拆数,求f(1)~f(n)

Solution


考虑分拆数的生成函数 F ( x ) F(x) F(x),就是
F ( x ) = ∏ i ≥ 0 ( 1 1 − x i ) F(x)=\prod\limits_{i\ge 0}\left({\frac{1}{1-x^i}}\right) F(x)=i0(1xi1)

常规套路就是两边取对数变成加法,于是
ln ⁡ ( F ( x ) ) = − ∑ i ≥ 1 ln ⁡ ( 1 − x i ) \ln\left(F(x)\right)=-\sum\limits_{i\ge1}\ln(1-x^i) ln(F(x))=i1ln(1xi)

考虑对右柿泰勒展开,导数值我们取 x 0 = 0 x_0=0 x0=0,那么
ln ⁡ ( F ( x ) ) = ∑ i ≥ 1 ∑ j ≥ 1 x i j j \ln\left(F(x)\right)=\sum\limits_{i\ge1}\sum\limits_{j\ge1}\frac{x^{ij}}{j} ln(F(x))=i1j1jxij
其中用到一个结论是
ln ⁡ ( x + 1 ) = ∑ n ≥ 1 ( − 1 ) n + 1 x n n \ln(x+1)=\sum\limits_{n\ge1}{(-1)}^{n+1}\frac{x^n}{n} ln(x+1)=n1(1)n+1nxn
上柿是函数 f ( x ) = ln ⁡ ( x + 1 ) f(x)=\ln(x+1) f(x)=ln(x+1)的麦克劳林级数,我们把x用 − x i j -x^{ij} xij带就可以了

因为多项式的界次是n的,因此答案右边的柿子可以nlogn求,我们只需要exp回去就可以了

Code


口胡博客没有代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值