[Note] 多項式全家桶 小球與盒子 分拆數

- Partition NumberReference
pr(n)p_r(n) 表示將正整數 nn 拆分爲若干個不大於 rr 的正整數的和的方案數(無序)。

1.你可以 DP

pr(n)={1n=1  or  r=1pn(n)n<r1+pn1(n)n=rpr1(n)+pr(nr)n>rp_r(n)=\begin{cases} 1&n=1\;or\;r=1\\ p_n(n)&n<r\\ 1+p_{n-1}(n)&n=r\\ p_{r-1}(n)+p_{r}(n-r)&n>r \end{cases}
(爲了閱讀方便我就沒有在後面專門標上 n,r>1n,r>1 了。。

性質:把 nn 分成不多於 rr 個正整數的和的方案數 = pr(n)p_r(n)
不難。

另外,把 nn 分成 rr 個正整數的和的方案數 = 把 nn 分成若干個最大恰好爲 rr 的正整數的和的方案數。
用容斥原理就可以推得,並且這個東西不難想到可以用組合數解決(實際上可以抽象成球和盒子的問題,

2.我會生成函數!
分拆數是無序的。設普通生成函數 G(x)=n=0pr(n)xnG(x)=\sum\limits_{n=0}^\infty p_r(n)x^n
pr(n)p_r(n) 是什麼呢?考慮生成函數的那種把 xx 的指數拆分成多個數相加 感覺發現了華點
那麼只要考慮搞出多個生成函數分別表示某個數出現了幾次 然後乘起來
那麼容易得到G(x)=n=0pr(n)xn=k=1n(1+xk+x2k++xnkk)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})
然後利用我們的n=0xkn=11xk\sum\limits_{n=0}^\infty x^{kn}=\frac{1}{1-x^k}
得到G(x)=k=1n11xkG(x)=\prod\limits_{k=1}^n\frac{1}{1-x^k}
怎麼辦呢 兩邊同時 ln\ln 把右邊的 \prod 搞掉
lnG(x)=k=1nln(1xk)\ln G(x)=\sum\limits_{k=1}^n-\ln(1-x^k)
把右邊那個 ln(1x)\ln(1-x) 展開一下
lnG(x)=k=1nr=0xrkr\ln G(x)=\sum\limits_{k=1}^n\sum\limits_{r=0}^\infty\frac{x^{rk}}{r}
A(x)=lnG(x)A(x)=\ln G(x) 那麼
G(x)=eA(x)G(x)=e^{A(x)}
(什麼這不是廢話嗎
注意到我們只要求 (modxn+1)\pmod{x^{n+1}} 意義下的
那麼
套多項式求 ln 和多項式求 exp 就可以啦。快去秒,loj上有

3.我會廣義五邊形數!
你真的會嘛參考百蠹百磕


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


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

對於至少是 F(n)=i=0n1F(i)G(ni)F(n)=\sum\limits_{i=0}^{n-1}F(i)G(n-i) 形式的還可以用多項式求逆解決。
設普通生成函數 A(x)=i=0nF(i)xiA(x)=\sum\limits_{i=0}^nF(i)x^iB(x)=i=1nG(i)xiB(x)=\sum\limits_{i=1}^nG(i)x^i (注意 ii 的範圍
由原式可以得到 A(x)B(x)=n=1xni=0n1F(i)G(ni)=n=1F(n)xn=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)(1B(x))1F(0)(mod2t)A(x)\equiv(1-B(x))^{-1}F(0)\pmod{2^t}
取個合適的模數搞一搞。O(nlogn)O(n\log n)


Ex.多項式積分&求導
逐項搞就完了,,,


Ex.多項式求ln
多項式 ln\ln 的定義ln(1x)=n=1xnn\ln(1-x)=-\sum\limits_{n=1}^\infty\frac{x^n}{n}
多項式求 ln\ln lnF=FF=FF1\ln F=\int\frac{F'}{F}=\int F'F^{-1}
需要 FF 的常數項爲 11
實質上是複合函數 ln\lnFF
直接球。


Ex.多項式牛頓迭代
給出 G(x)G(x)
F(x)F(x) 滿足 G(F(x))=0G(F(x))=0

仍然考慮倍增。
假設已知 F0(x)F_0(x) 滿足 G(F0(x))0(modxt)G(F_0(x))\equiv0\pmod{x^t}F(x)F(x) 滿足 G(F(x))0(modx2i)G(F(x))\equiv0\pmod{x^{2i}}
存在G(F)=n=0G(n)(F)(FF0)nn!G(F)=\sum\limits_{n=0}^\infty\frac{G^{(n)}(F)\otimes(F-F_0)^n}{n!}
(爲了我偷懶方便,下面直接用 FF 代替 F(x)F(x) 其它的同理)
同時 FF0(modxt)F\equiv F_0\pmod{x^t} 由此有,當 k>1k>1(FF0)k0(modx2t)\left(F-F_0\right)^k\equiv0\pmod{x^{2t}}
那麼,G(F)G(F0)+G(F0)(FF0)(modx2t)G(F)\equiv G(F_0)+G'(F_0)\otimes(F-F_0)\pmod{x^{2t}}
代入 xx 整理得到 FF0G(F0)G(F0)(modx2t)F\equiv F_0-\frac{G(F_0)}{G'(F_0)}\pmod{x^{2t}}
G(F0)G'(F_0) 求個逆就可以。


Ex.牛頓迭代
xn+1=xnf(xn)f(xn)x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}
可能會炸


Ex.多項式exp
ex=n=0xnn!e^x=\sum\limits_{n=0}^{\infty}\frac{x^n}{n!}
由此定義
eF(x)=expF(x)=n=0Fn(x)n!e^{F(x)}=\exp{F(x)}=\sum\limits_{n=0}^\infty\frac{F^n(x)}{n!}
需要 FF 的常數項爲 00 (因爲 ee 在這邊的意義下不是良定義的,只能 e0e^0
實質上是複合函數 exp\expFF
我們知道 explnF=F\exp\ln F=F 而且 lnexpF=F\ln\exp F=F
顯然有 lnG=F\ln G=F 換一下變成 lnGF=0\ln G-F=0 把左邊那個拿去牛頓迭代
A(G)=lnGFA(G)=\ln G-F
GG0A(G0)A(G0)G\equiv G_0-\frac{A(G_0)}{A'(G_0)}
GG0lnG0FG01G0(1lnG0+F)G\equiv G_0-\frac{\ln G_0-F}{{G_0}^{-1}}\equiv G_0(1-\ln G_0+F)
倍增就可以了。複雜度是 O(nlogn)O(n\log n)

另一種做法?
G(x)=expF(x)G(x)=\exp F(x)
G(x)=F(x)expF(x)G'(x)=F'(x)\exp F(x)
G(x)=F(x)G(x)G'(x)=F'(x)G(x)
G(x)=F(x)G(x)G(x)=\int F'(x)G(x)
分治 FFT O(nlog2n)O(n\log^2 n)


我發現本來只是打算補一下用到的東西結果快把多項式補完了
那就補完吧
Ex.多項式快速冪
按照普通快速冪的方法直接做可以做到 O(nlog2n)O(n\log^2n)
另外也可以
G=FkG=F^k
lnG=klnF\ln G=k\ln F
那麼 lnF=lnGk\ln F=\frac{\ln G}{k} 然後再 exp\exp 回去
O(nlogn)O(n\log n)
前提是:多項式的常數項爲 11
否則就要把多項式的最低項變成 11 然後扯到常數項。。。

k>0k>0 次方根同理。


Ex.多項式開根
平方 平方 搞一搞
或者直接牛頓迭代。


Ex.多項式帶餘除法
F(x)=G(x)Q(x)+R(x)F(x)=G(x)Q(x)+R(x)
F(1x)=G(1x)Q(1x)+R(1x)F(\frac{1}{x})=G(\frac{1}{x})Q(\frac{1}{x})+R(\frac{1}{x})
xnF(1x)=xnG(1x)Q(1x)+xnR(1x)x^nF(\frac{1}{x})= x^nG(\frac{1}{x})Q(\frac{1}{x})+x^nR(\frac{1}{x})
F(x)=G(x)Q(x)+xnm+1R(x)\overline{F}(x)=\overline{G}(x)\overline{Q}(x)+x^{n-m+1}R(x)
F(x)G(x)Q(x)(modxnm+1)\overline{F}(x)\equiv\overline{G}(x)\overline{Q}(x)\pmod{x^{n-m+1}}
隨便搞一搞。
核心思想是把係數翻轉以期無視掉餘數。


Ex.拉格朗日插值法Reference
L(x)=j=0n(yiijxxixjxi)\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)
可以直接代入一個 xx 求值,複雜度 O(n2)O(n^2)
如果 xix_i 取值連續的話複雜度是 O(n)O(n) 的。


Ex.重心拉格朗日插值法
ωj=ij(xjxi)\omega_j=\prod\limits_{i\ne j}(x_j-x_i)
L(x)=(i=0n(xxi))(j=0nωjyjxxj)\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)
支持動態加點。(求最後的值的)複雜度不變。
每次加點需要的重新計算複雜度 O(n)O(n)


Ex.多項式多點求值
A(ai)  ,  i[1,n]A(a_i)\;,\;i\in[1,n]
構造 B(x)=ixxiB(x)=\prod_i x-x_i
分治
一。i∈(L,Mid] A0A(modB0)A_0\equiv A\pmod{B_0}
二。i∈(Mid,R] A1A(modB1)A_1\equiv A\pmod{B_1}
自底向上每次卷 B0B_0B1B_1 可以得到新的 BB 順便把 A0A_0A1A_1 拼起來得到 AA
複雜度 O(nlog2n)O(n\log^2 n)


Ex.多項式快速插值
極限求導搞一搞
csdn的不等於號又掛了
ji(xixj)=limxxijxxjxxi=(jxxj)x=xi\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)|'_{x=x_i}
分治求出多項式 xxj\prod x-x_j 各項係數 每次把 LR\prod\limits_{L}^R 變成 LMM+1R\prod\limits_L^M\otimes\prod\limits_{M+1}^R 可以 FFT 合併
分治複雜度 O(nlog2n)O(n\log^2n)
然後求導 對所有 xix_i 多點求值
複雜度 O(nlog2n)O(n\log^2n)


Ex.多項式複合逆:拉格朗日反演Reference
f(g(x))=xf(g(x))=xffgg 的複合逆 (PS 顯然 f(g(x))=g(f(x))f(g(x))=g(f(x)) 恆成立)
首先約定 [xk]f(x)[x^k]f(x) 表示 f(x)f(x) xkx^k 項的係數。
現在知道 gg 要求 ff 的某一項係數
[xn]f(x)=1x[xn1](xg(x))n[x^n]f(x)=\frac{1}{x}[x^{n-1}]\left(\frac{x}{g(x)}\right)^n


Ex.擴展拉格朗日反演
[xn]h(f(x))=1x[xn1]h(x)(xg(x))n[x^n]h(f(x))=\frac{1}{x}[x^{n-1}]h'(x)\left(\frac{x}{g(x)}\right)^n


Ex.Berlekamp-MasseyReference
網上的中文解釋我都康不懂,所以我就直接口胡了,大概是有錯的
假設要求 ff 的最短常係數齊次線性遞推 設合法遞推式爲 gg
設它們的生成函數爲 FFGG 那麼 n,  FGfnxn(modxn+1)\forall n,\;F\otimes G\equiv f_nx^n\pmod{x^{n+1}}
假設某個錯誤的遞推式 hh 生成函數 HH 滿足 HF(fn+ζ)xn(modxn+1)H\otimes F\equiv (f_n+\zeta)\cdot x^n\pmod{x^{n+1}}
如果已知另一個錯誤的 eeEE 滿足 xmEF(fnm+ϵ)xn(modxnm+1)x^mE\otimes F\equiv(f_{n-m}+\epsilon)\cdot x^{n}\pmod{x^{n-m+1}}
xmEF(fnm+ϵ)xn(modxn+1)x^mE\otimes F\equiv(f_{n-m}+\epsilon)\cdot x^{n}\pmod{x^{n+1}}
然後 HFζfn+m+ϵxmEFfnxn(modxn+1)H\otimes F-\frac{\zeta}{f_{_{n+m}}+\epsilon}\cdot x^{m} E\otimes F\equiv f_nx^n\pmod{x^{n+1}}
就是說 (Hϵfn+m+ϵxmE)Ffnxn(modxn+1)(H-\frac{\epsilon}{f_{_{n+m}}+\epsilon}\cdot x^mE)\otimes F\equiv f_nx^n\pmod{x^{n+1}}
彳⑧
不行我也不管了。。。

哦,EE 要怎麼取?
爲了得到最短遞推式,期望應該是取……就取最短的那個就完了。嗯
上面的純粹是口胡 我建議去看 Reference 裏面的英文解釋
如果你看得懂網上的中文解釋也沒有問題鴨


Ex.Cayley-HamiltonReference
已知遞推式 fn=i=1maifnif_n=\sum\limits_{i=1}^m a_if_{n-i}ff 的前 mm 項,求 fyf_y
顯然有 fm=i=1maifmif_m=\sum\limits_{i=1}^m a_if_{m-i} 同時有 fy=fyf_y=f_y
fy=xyf_y=x^yxmi=1maixmix^m-\sum\limits_{i=1}^ma_ix^{m-i} 取模即可
然後你就可以得到 fyf_y 用前 mmfif_i 表示的式子、就可以 O(m)O(m) 爆算 fyf_y


實際上上面全都是口胡的因爲這個多項式全家桶我一點也沒有打


- 將 n 個小球放入 m 個盒子中的方案數Reference

第一條和第二條可能和這裏的情況不是很符合,反正想一想就秒了)
最後一條根本就不用用到第二類斯特林數當然用來記第二類斯特林數的性質倒是很不錯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章