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

Description


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

Solution


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

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

考虑对右柿泰勒展开,导数值我们取x0=0x_0=0x0=0,那么
ln⁡(F(x))=∑i≥1∑j≥1xijj\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+1xnn\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用−xij-x^{ij}xij带就可以了

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

Code


口胡博客没有代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值