[Note] 多项式全家桶 小球与盒子 分拆数

- Partition NumberReference
p r ( n ) p_r(n) pr(n) 表示将正整数 n n n 拆分为若干个不大于 r r r 的正整数的和的方案数(无序)。

1.你可以 DP

p r ( n ) = { 1 n = 1 &ThickSpace; o r &ThickSpace; r = 1 p n ( n ) n &lt; r 1 + p n − 1 ( n ) n = r p r − 1 ( n ) + p r ( n − r ) n &gt; r p_r(n)=\begin{cases} 1&amp;n=1\;or\;r=1\\ p_n(n)&amp;n&lt;r\\ 1+p_{n-1}(n)&amp;n=r\\ p_{r-1}(n)+p_{r}(n-r)&amp;n&gt;r \end{cases} pr(n)=1pn(n)1+pn1(n)pr1(n)+pr(nr)n=1orr=1n<rn=rn>r
(为了阅读方便我就没有在后面专门标上 n , r &gt; 1 n,r&gt;1 n,r>1 了。。

性质:把 n n n 分成不多于 r r r 个正整数的和的方案数 = p r ( n ) p_r(n) pr(n)
不难。

另外,把 n n n 分成 r r r 个正整数的和的方案数 = 把 n n n 分成若干个最大恰好为 r r r 的正整数的和的方案数。
用容斥原理就可以推得,并且这个东西不难想到可以用组合数解决(实际上可以抽象成球和盒子的问题,

2.我会生成函数!
分拆数是无序的。设普通生成函数 G ( x ) = ∑ n = 0 ∞ p r ( n ) x n G(x)=\sum\limits_{n=0}^\infty p_r(n)x^n G(x)=n=0pr(n)xn
p r ( n ) p_r(n) pr(n) 是什么呢?考虑生成函数的那种把 x x x 的指数拆分成多个数相加 感觉发现了华点
那么只要考虑搞出多个生成函数分别表示某个数出现了几次 然后乘起来
那么容易得到 G ( x ) = ∑ n = 0 ∞ p r ( n ) x n = ∏ k = 1 n ( 1 + x k + x 2 k + ⋯ + x ⌊ n k ⌋ k ) G(x)=\sum\limits_{n=0}^\infty p_r(n)x^n=\prod\limits_{k=1}^{n}(1+x^k+x^{2k}+\cdots+x^{\lfloor\frac{n}{k}\rfloor k}) G(x)=n=0pr(n)xn=k=1n(1+xk+x2k++xknk)
然后利用我们的 ∑ n = 0 ∞ x k n = 1 1 − x k \sum\limits_{n=0}^\infty x^{kn}=\frac{1}{1-x^k} n=0xkn=1xk1
得到 G ( x ) = ∏ k = 1 n 1 1 − x k G(x)=\prod\limits_{k=1}^n\frac{1}{1-x^k} G(x)=k=1n1xk1
怎么办呢 两边同时 ln ⁡ \ln ln 把右边的 ∏ \prod 搞掉
ln ⁡ G ( x ) = ∑ k = 1 n − ln ⁡ ( 1 − x k ) \ln G(x)=\sum\limits_{k=1}^n-\ln(1-x^k) lnG(x)=k=1nln(1xk)
把右边那个 ln ⁡ ( 1 − x ) \ln(1-x) ln(1x) 展开一下
ln ⁡ G ( x ) = ∑ k = 1 n ∑ r = 0 ∞ x r k r \ln G(x)=\sum\limits_{k=1}^n\sum\limits_{r=0}^\infty\frac{x^{rk}}{r} lnG(x)=k=1nr=0rxrk
A ( x ) = ln ⁡ G ( x ) A(x)=\ln G(x) A(x)=lnG(x) 那么
G ( x ) = e A ( x ) G(x)=e^{A(x)} G(x)=eA(x)
(什么这不是废话吗
注意到我们只要求 ( m o d x n + 1 ) \pmod{x^{n+1}} (modxn+1) 意义下的
那么
套多项式求 ln 和多项式求 exp 就可以啦。快去秒,loj上有

3.我会广义五边形数!
你真的会嘛参考百蠹百磕


Ex.多项式求逆Reference
已知 F ( x ) F(x) F(x) f ( x ) = F − 1 ( x ) f(x)=F^{-1}(x) f(x)=F1(x)
f i + 1 ( x ) ≡ 2 f i ( x ) − F ( x ) f i 2 ( x ) ( m o d x 2 i + 1 ) f_{i+1}(x)\equiv2f_i(x)-F(x){f_i}^2(x)\pmod{x^{2^{i+1}}} fi+1(x)2fi(x)F(x)fi2(x)(modx2i+1)


Ex.分治FFT
F ( n ) = a F ( b ) + c + ∑ i = 0 n − 1 d F ( i ) G ( n − i ) F(n)=aF(b)+c+\sum\limits_{i=0}^{n-1}dF(i)G(n-i) F(n)=aF(b)+c+i=0n1dF(i)G(ni)
分治即可,,, O ( n log ⁡ 2 n ) O(n\log^2n) O(nlog2n)

对于至少是 F ( n ) = ∑ i = 0 n − 1 F ( i ) G ( n − i ) F(n)=\sum\limits_{i=0}^{n-1}F(i)G(n-i) F(n)=i=0n1F(i)G(ni) 形式的还可以用多项式求逆解决。
设普通生成函数 A ( x ) = ∑ i = 0 n F ( i ) x i A(x)=\sum\limits_{i=0}^nF(i)x^i A(x)=i=0nF(i)xi B ( x ) = ∑ i = 1 n G ( i ) x i B(x)=\sum\limits_{i=1}^nG(i)x^i B(x)=i=1nG(i)xi (注意 i i i 的范围
由原式可以得到 A ( x ) B ( x ) = ∑ n = 1 ∞ x n ∑ i = 0 n − 1 F ( i ) G ( n − i ) = ∑ n = 1 ∞ F ( n ) x n = A ( x ) − F ( 0 ) A(x)B(x)=\sum\limits_{n=1}^\infty x^n\sum\limits_{i=0}^{n-1}F(i)G(n-i)=\sum\limits_{n=1}^\infty F(n)x^n=A(x)-F(0) A(x)B(x)=n=1xni=0n1F(i)G(ni)=n=1F(n)xn=A(x)F(0)
辣么 A ( x ) ≡ ( 1 − B ( x ) ) − 1 F ( 0 ) ( m o d 2 t ) A(x)\equiv(1-B(x))^{-1}F(0)\pmod{2^t} A(x)(1B(x))1F(0)(mod2t)
取个合适的模数搞一搞。 O ( n log ⁡ n ) O(n\log n) O(nlogn)


Ex.多项式积分&求导
逐项搞就完了,,,


Ex.多项式求ln
多项式 ln ⁡ \ln ln 的定义 ln ⁡ ( 1 − x ) = − ∑ n = 1 ∞ x n n \ln(1-x)=-\sum\limits_{n=1}^\infty\frac{x^n}{n} ln(1x)=n=1nxn
多项式求 ln ⁡ \ln ln ln ⁡ F = ∫ F ′ F = ∫ F ′ F − 1 \ln F=\int\frac{F&#x27;}{F}=\int F&#x27;F^{-1} lnF=FF=FF1
需要 F F F 的常数项为 1 1 1
实质上是复合函数 ln ⁡ \ln ln F F F
直接球。


Ex.多项式牛顿迭代
给出 G ( x ) G(x) G(x)
F ( x ) F(x) F(x) 满足 G ( F ( x ) ) = 0 G(F(x))=0 G(F(x))=0

仍然考虑倍增。
假设已知 F 0 ( x ) F_0(x) F0(x) 满足 G ( F 0 ( x ) ) ≡ 0 ( m o d x t ) G(F_0(x))\equiv0\pmod{x^t} G(F0(x))0(modxt) F ( x ) F(x) F(x) 满足 G ( F ( x ) ) ≡ 0 ( m o d x 2 i ) G(F(x))\equiv0\pmod{x^{2i}} G(F(x))0(modx2i)
存在 G ( F ) = ∑ n = 0 ∞ G ( n ) ( F ) ⊗ ( F − F 0 ) n n ! G(F)=\sum\limits_{n=0}^\infty\frac{G^{(n)}(F)\otimes(F-F_0)^n}{n!} G(F)=n=0n!G(n)(F)(FF0)n
(为了我偷懒方便,下面直接用 F F F 代替 F ( x ) F(x) F(x) 其它的同理)
同时 F ≡ F 0 ( m o d x t ) F\equiv F_0\pmod{x^t} FF0(modxt) 由此有,当 k &gt; 1 k&gt;1 k>1 ( F − F 0 ) k ≡ 0 ( m o d x 2 t ) \left(F-F_0\right)^k\equiv0\pmod{x^{2t}} (FF0)k0(modx2t)
那么, G ( F ) ≡ G ( F 0 ) + G ′ ( F 0 ) ⊗ ( F − F 0 ) ( m o d x 2 t ) G(F)\equiv G(F_0)+G&#x27;(F_0)\otimes(F-F_0)\pmod{x^{2t}} G(F)G(F0)+G(F0)(FF0)(modx2t)
代入 x x x 整理得到 F ≡ F 0 − G ( F 0 ) G ′ ( F 0 ) ( m o d x 2 t ) F\equiv F_0-\frac{G(F_0)}{G&#x27;(F_0)}\pmod{x^{2t}} FF0G(F0)G(F0)(modx2t)
G ′ ( F 0 ) G&#x27;(F_0) G(F0) 求个逆就可以。


Ex.牛顿迭代
x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1}=x_n-\frac{f(x_n)}{f&#x27;(x_n)} xn+1=xnf(xn)f(xn)
可能会炸


Ex.多项式exp
e x = ∑ n = 0 ∞ x n n ! e^x=\sum\limits_{n=0}^{\infty}\frac{x^n}{n!} ex=n=0n!xn
由此定义
e F ( x ) = exp ⁡ F ( x ) = ∑ n = 0 ∞ F n ( x ) n ! e^{F(x)}=\exp{F(x)}=\sum\limits_{n=0}^\infty\frac{F^n(x)}{n!} eF(x)=expF(x)=n=0n!Fn(x)
需要 F F F 的常数项为 0 0 0 (因为 e e e 在这边的意义下不是良定义的,只能 e 0 e^0 e0
实质上是复合函数 exp ⁡ \exp exp F F F
我们知道 exp ⁡ ln ⁡ F = F \exp\ln F=F explnF=F 而且 ln ⁡ exp ⁡ F = F \ln\exp F=F lnexpF=F
显然有 ln ⁡ G = F \ln G=F lnG=F 换一下变成 ln ⁡ G − F = 0 \ln G-F=0 lnGF=0 把左边那个拿去牛顿迭代
A ( G ) = ln ⁡ G − F A(G)=\ln G-F A(G)=lnGF
G ≡ G 0 − A ( G 0 ) A ′ ( G 0 ) G\equiv G_0-\frac{A(G_0)}{A&#x27;(G_0)} GG0A(G0)A(G0)
G ≡ G 0 − ln ⁡ G 0 − F G 0 − 1 ≡ G 0 ( 1 − ln ⁡ G 0 + F ) G\equiv G_0-\frac{\ln G_0-F}{{G_0}^{-1}}\equiv G_0(1-\ln G_0+F) GG0G01lnG0FG0(1lnG0+F)
倍增就可以了。复杂度是 O ( n log ⁡ n ) O(n\log n) O(nlogn)

另一种做法?
G ( x ) = exp ⁡ F ( x ) G(x)=\exp F(x) G(x)=expF(x)
G ′ ( x ) = F ′ ( x ) exp ⁡ F ( x ) G&#x27;(x)=F&#x27;(x)\exp F(x) G(x)=F(x)expF(x)
G ′ ( x ) = F ′ ( x ) G ( x ) G&#x27;(x)=F&#x27;(x)G(x) G(x)=F(x)G(x)
G ( x ) = ∫ F ′ ( x ) G ( x ) G(x)=\int F&#x27;(x)G(x) G(x)=F(x)G(x)
分治 FFT O ( n log ⁡ 2 n ) O(n\log^2 n) O(nlog2n)


我发现本来只是打算补一下用到的东西结果快把多项式补完了
那就补完吧
Ex.多项式快速幂
按照普通快速幂的方法直接做可以做到 O ( n log ⁡ 2 n ) O(n\log^2n) O(nlog2n)
另外也可以
G = F k G=F^k G=Fk
ln ⁡ G = k ln ⁡ F \ln G=k\ln F lnG=klnF
那么 ln ⁡ F = ln ⁡ G k \ln F=\frac{\ln G}{k} lnF=klnG 然后再 exp ⁡ \exp exp 回去
O ( n log ⁡ n ) O(n\log n) O(nlogn)
前提是:多项式的常数项为 1 1 1
否则就要把多项式的最低项变成 1 1 1 然后扯到常数项。。。

k &gt; 0 k&gt;0 k>0 次方根同理。


Ex.多项式开根
平方 平方 搞一搞
或者直接牛顿迭代。


Ex.多项式带余除法
F ( x ) = G ( x ) Q ( x ) + R ( x ) F(x)=G(x)Q(x)+R(x) F(x)=G(x)Q(x)+R(x)
F ( 1 x ) = G ( 1 x ) Q ( 1 x ) + R ( 1 x ) F(\frac{1}{x})=G(\frac{1}{x})Q(\frac{1}{x})+R(\frac{1}{x}) F(x1)=G(x1)Q(x1)+R(x1)
x n F ( 1 x ) = x n G ( 1 x ) Q ( 1 x ) + x n R ( 1 x ) x^nF(\frac{1}{x})= x^nG(\frac{1}{x})Q(\frac{1}{x})+x^nR(\frac{1}{x}) xnF(x1)=xnG(x1)Q(x1)+xnR(x1)
F ‾ ( x ) = G ‾ ( x ) Q ‾ ( x ) + x n − m + 1 R ( x ) \overline{F}(x)=\overline{G}(x)\overline{Q}(x)+x^{n-m+1}R(x) F(x)=G(x)Q(x)+xnm+1R(x)
F ‾ ( x ) ≡ G ‾ ( x ) Q ‾ ( x ) ( m o d x n − m + 1 ) \overline{F}(x)\equiv\overline{G}(x)\overline{Q}(x)\pmod{x^{n-m+1}} F(x)G(x)Q(x)(modxnm+1)
随便搞一搞。
核心思想是把系数翻转以期无视掉余数。


Ex.拉格朗日插值法Reference
L ( x ) = ∑ j = 0 n ( y i ∏ i ≠ j x − x i x j − x i ) \frak{L}(x)=\sum\limits_{j=0}^n\left(y_i\prod\limits_{i\ne j}\frac{x-x_i}{x_j-x_i}\right) L(x)=j=0nyii̸=jxjxixxi
可以直接代入一个 x x x 求值,复杂度 O ( n 2 ) O(n^2) O(n2)
如果 x i x_i xi 取值连续的话复杂度是 O ( n ) O(n) O(n) 的。


Ex.重心拉格朗日插值法
ω j = ∏ i ≠ j ( x j − x i ) \omega_j=\prod\limits_{i\ne j}(x_j-x_i) ωj=i̸=j(xjxi)
L ( x ) = ( ∏ i = 0 n ( x − x i ) ) ( ∑ j = 0 n ω j ⋅ y j x − x j ) \frak{L}(x)=\left(\prod\limits_{i=0}^n(x-x_i)\right)\left(\sum\limits_{j=0}^n\frac{\omega_j\cdot y_j}{x-x_j}\right) L(x)=(i=0n(xxi))(j=0nxxjωjyj)
支持动态加点。(求最后的值的)复杂度不变。
每次加点需要的重新计算复杂度 O ( n ) O(n) O(n)


Ex.多项式多点求值
A ( a i ) &ThickSpace; , &ThickSpace; i ∈ [ 1 , n ] A(a_i)\;,\;i\in[1,n] A(ai),i[1,n]
构造 B ( x ) = ∏ i x − x i B(x)=\prod_i x-x_i B(x)=ixxi
分治
一。i∈(L,Mid] A 0 ≡ A ( m o d B 0 ) A_0\equiv A\pmod{B_0} A0A(modB0)
二。i∈(Mid,R] A 1 ≡ A ( m o d B 1 ) A_1\equiv A\pmod{B_1} A1A(modB1)
自底向上每次卷 B 0 B_0 B0 B 1 B_1 B1 可以得到新的 B B B 顺便把 A 0 A_0 A0 A 1 A_1 A1 拼起来得到 A A A
复杂度 O ( n log ⁡ 2 n ) O(n\log^2 n) O(nlog2n)


Ex.多项式快速插值
极限求导搞一搞
csdn的不等于号又挂了
∏ j 不 等 于 i ( x i − x j ) = lim ⁡ x → x i ∏ 所 有 的 j x − x j x − x i = ( ∏ 所 有 的 j x − x j ) ∣ x = x i ′ \prod\limits_{j不等于i}(x_i-x_j)=\lim\limits_{x\to x_i}\frac{\prod\limits_{所有的j}x-x_j}{x-x_i}=\left(\prod\limits_{所有的j}x-x_j\right)|&#x27;_{x=x_i} ji(xixj)=xxilimxxijxxj=(jxxj)x=xi
分治求出多项式 ∏ x − x j \prod x-x_j xxj 各项系数 每次把 ∏ L R \prod\limits_{L}^R LR 变成 ∏ L M ⊗ ∏ M + 1 R \prod\limits_L^M\otimes\prod\limits_{M+1}^R LMM+1R 可以 FFT 合并
分治复杂度 O ( n log ⁡ 2 n ) O(n\log^2n) O(nlog2n)
然后求导 对所有 x i x_i xi 多点求值
复杂度 O ( n log ⁡ 2 n ) O(n\log^2n) O(nlog2n)


Ex.多项式复合逆:拉格朗日反演Reference
f ( g ( x ) ) = x f(g(x))=x f(g(x))=x f f f g g g 的复合逆 (PS 显然 f ( g ( x ) ) = g ( f ( x ) ) f(g(x))=g(f(x)) f(g(x))=g(f(x)) 恒成立)
首先约定 [ x k ] f ( x ) [x^k]f(x) [xk]f(x) 表示 f ( x ) f(x) f(x) x k x^k xk 项的系数。
现在知道 g g g 要求 f f f 的某一项系数
[ x n ] f ( x ) = 1 x [ x n − 1 ] ( x g ( x ) ) n [x^n]f(x)=\frac{1}{x}[x^{n-1}]\left(\frac{x}{g(x)}\right)^n [xn]f(x)=x1[xn1](g(x)x)n


Ex.扩展拉格朗日反演
[ x n ] h ( f ( x ) ) = 1 x [ x n − 1 ] h ′ ( x ) ( x g ( x ) ) n [x^n]h(f(x))=\frac{1}{x}[x^{n-1}]h&#x27;(x)\left(\frac{x}{g(x)}\right)^n [xn]h(f(x))=x1[xn1]h(x)(g(x)x)n


Ex.Berlekamp-MasseyReference
网上的中文解释我都康不懂,所以我就直接口胡了,大概是有错的
假设要求 f f f 的最短常系数齐次线性递推 设合法递推式为 g g g
设它们的生成函数为 F F F G G G 那么 ∀ n , &ThickSpace; F ⊗ G ≡ f n x n ( m o d x n + 1 ) \forall n,\;F\otimes G\equiv f_nx^n\pmod{x^{n+1}} n,FGfnxn(modxn+1)
假设某个错误的递推式 h h h 生成函数 H H H 满足 H ⊗ F ≡ ( f n + ζ ) ⋅ x n ( m o d x n + 1 ) H\otimes F\equiv (f_n+\zeta)\cdot x^n\pmod{x^{n+1}} HF(fn+ζ)xn(modxn+1)
如果已知另一个错误的 e e e E E E 满足 x m E ⊗ F ≡ ( f n − m + ϵ ) ⋅ x n ( m o d x n − m + 1 ) x^mE\otimes F\equiv(f_{n-m}+\epsilon)\cdot x^{n}\pmod{x^{n-m+1}} xmEF(fnm+ϵ)xn(modxnm+1)
x m E ⊗ F ≡ ( f n − m + ϵ ) ⋅ x n ( m o d x n + 1 ) x^mE\otimes F\equiv(f_{n-m}+\epsilon)\cdot x^{n}\pmod{x^{n+1}} xmEF(fnm+ϵ)xn(modxn+1)
然后 H ⊗ F − ζ f n + m + ϵ ⋅ x m E ⊗ F ≡ f n x n ( m o d x n + 1 ) H\otimes F-\frac{\zeta}{f_{_{n+m}}+\epsilon}\cdot x^{m} E\otimes F\equiv f_nx^n\pmod{x^{n+1}} HFfn+m+ϵζxmEFfnxn(modxn+1)
就是说 ( H − ϵ f n + m + ϵ ⋅ x m E ) ⊗ F ≡ f n x n ( m o d x n + 1 ) (H-\frac{\epsilon}{f_{_{n+m}}+\epsilon}\cdot x^mE)\otimes F\equiv f_nx^n\pmod{x^{n+1}} (Hfn+m+ϵϵxmE)Ffnxn(modxn+1)
彳⑧
不行我也不管了。。。

哦, E E E 要怎么取?
为了得到最短递推式,期望应该是取……就取最短的那个就完了。嗯
上面的纯粹是口胡 我建议去看 Reference 里面的英文解释
如果你看得懂网上的中文解释也没有问题鸭


Ex.Cayley-HamiltonReference
已知递推式 f n = ∑ i = 1 m a i f n − i f_n=\sum\limits_{i=1}^m a_if_{n-i} fn=i=1maifni f f f 的前 m m m 项,求 f y f_y fy
显然有 f m = ∑ i = 1 m a i f m − i f_m=\sum\limits_{i=1}^m a_if_{m-i} fm=i=1maifmi 同时有 f y = f y f_y=f_y fy=fy
f y = x y f_y=x^y fy=xy x m − ∑ i = 1 m a i x m − i x^m-\sum\limits_{i=1}^ma_ix^{m-i} xmi=1maixmi 取模即可
然后你就可以得到 f y f_y fy 用前 m m m f i f_i fi 表示的式子、就可以 O ( m ) O(m) O(m) 爆算 f y f_y fy


实际上上面全都是口胡的因为这个多项式全家桶我一点也没有打


- 将 n 个小球放入 m 个盒子中的方案数Reference

第一条和第二条可能和这里的情况不是很符合,反正想一想就秒了)
最后一条根本就不用用到第二类斯特林数当然用来记第二类斯特林数的性质倒是很不错

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值