2024.2.6 闲话

拜谢国际特级大师 APJifengc,今一您扬向 .

歌:ワーニング!- タケノコ少年 feat. 初音ミク .

发现以前的闲话标题几乎全部写成 2023. 前缀的了,希望不要再这样了 .

也拜谢一波 Kaguya .


一直觉得分式分解比因式分解强就摆了,看到 APJ 的一些东西才发现一切的真相 .

分式分解问题:

有有理分式 \(\dfrac{P(z)}{Q(z)}\),想要部分分式分解 .

\(Q(z)=\prod_{i=1}^r(1-a_iz)^{k_i}\),则答案的形式肯定是:

\[\dfrac{P(z)}{Q(z)}=\sum_{i=1}^r\dfrac{R_i(z)}{(1-a_iz)^{k_i}} \]

其中 \(\deg R_i(z)<k_i\) .

\(q_i(z)=(1-a_iz)^{k_i}\)(注意此处 \(q_i\) 之间互质),则可以得到:

\[P(z)=\sum_{i=1}^r\dfrac{R_i(z)Q(z)}{q_i(z)} \]

如果对 \(q_i(z)\) 取模则会发现:

\[P(z)\equiv\dfrac{R_i(z)Q(z)}{q_i(z)}\pmod{q_i(z)} \]

那么即可导出:

\[R_i(z)=P(z)\cdot\left(\dfrac{Q(z)}{q_i(z)}\bmod q_i(z)\right)^{-1}\bmod q_i(z) \]

这样就可以 \(\Theta(n\log n)\) 进行分式分解了 .

(我现在还不知道具体数学上的那个有理生成函数的一般展开定理有什么用)

有一些例子(免责声明:均为口胡):

营业日志 2020.5.20

\[[z^n]\dfrac1{\prod_{i=0}^m(1-(u+vi)z)} \]

其实这种没有重根的可以直接用不同根的有理展开定理状物,比较方便:

\[R_i(z)=\dfrac{(u+vi)^m}{\prod_{j\neq i}v(i-j)}=\dfrac{(u+vi)^m(-1)^{m-i}}{v^m(i-1)!(m-i)!} \]

如果用前面得到的式子也是一样的:

\[R_i(z)=\left(\prod_{j\neq i}\left(1-\dfrac{u+vj}{u+vi}\right)\right)^{-1}=\prod_{j\neq i}\dfrac{u+vi}{v(i-j)} \]

ABC241Ex Card Deck Score

给一个多重集,算任意取 \(m\) 个元素乘积的和 . 本质相同的组合只算一次 .

多重集最多 \(16\) 种元素 .

根据容斥可以发现只需要计算:

\[[z^m]\prod_{i=1}^n\dfrac1{1-a_iz} \]

分治乘算出分母后 Bostan-Mori 提取即可

分式分解后就可以快速计算了,总复杂度 \(O(n^2+n2^n\log m)\)(因为要算 \(2^n\) 处).

白的 Fibonacci

\[F(k,n) = \left \{\begin{aligned}&r_0\ && k = 1\ \land\ n = 0 \\&r_1\ && k = 1\ \land\ n = 1 \\&0\ && k > 1 \ \land \ n < 0 \\&a \times F(k, n - 1) + b \times F(k, n - 2)\ && k = 1 \ \land\ n > 1 \\&t_k \times F(k, n - 1) + s^n \times F(k - 1, n)\ && \text{otherwise}\end{aligned}\right. \]

\(F\) 的某处点值 .

我终于也能看懂这种东西了啊 .

首先考虑到有递推:

\[F_k(z)=t_kzF_k(z)+F_{k-1}(sz) \]

也就是:

\[F_k(z)=\begin{cases}\dfrac{r_0+(r_1-r_0a)z}{1-az-bz^2}&k=1\\\dfrac{F_{k-1}(sz)}{1-t_kz}&k>1\end{cases} \]

(通过某些方式)仔细地展开即可得到:

\[F_k(z)=\dfrac{r_0+(r_1-r_0a)s^{k-1}z}{1-as^{k-1}z-bs^{2k-2}z^2}\prod_{i=2}^k\dfrac1{1-t_ks^{k-i}z} \]

分式分解之后根据前面的分析,任务只有两个:

  • 计算 \(\dfrac{Q(z)}{q_i(z)}\bmod q_i(z)\)
  • \(\dfrac{Q(z)}{q_i(z)}\bmod q_i(z)\)\(q_i(z)\) 意义下的逆;

前者可以简单分治乘完成 . 后者因为前面的分析只需要做代换 \(t=1-a_iz\),那么就变为计算 \(1-t\) 处的值 . 注意到这样模数就变成 \(t^{k_i}\) 了,这是相对容易计算的 .

总之怎么说也可以在线性对数的时间复杂度内完成分式分解,那么问题就被解决了 .

Reference:

posted @ 2024-02-06 14:54  Jijidawang  阅读(115)  评论(3编辑  收藏  举报
😅​