zszz,使用 NTT 可以在 \(\mathcal O(n\log n)\) 的时间内求出两个多项式的卷积、以及一个多项式的 \(\text{inv},\ln,\exp,\text{sqrt}\) 等,但是如果模数不是 NTT 模数(譬如 \(10^9+7\))并且复杂度允许 \(\mathcal O(n^2)\) 实现上述操作,那么再使用 \(n\log n\) 的 NTT 优化版多项式全家桶就不合适了,因此我们也要懂得如何暴力 \(n^2\) 递推。

多项式乘法

这个就过于弱智了吧……直接枚举对应位然后往它们的和的地方贡献即可,这个幼儿园就学过了(

多项式求逆

假设 \(B\) 为 \(A\) 的逆元,那么显然有 \(AB=1\),即

\[\sum\limits_{i=0}^nA_iB_{n-i}=[n=0]
\]

\[A_0B_n=-\sum\limits_{i=1}^nA_iB_{n-i}(n\ge 1)
\]
\[B_n=-\dfrac{1}{A_0}\sum\limits_{i=1}^nA_iB_{n-i}
\]

边界 \(B_0=\dfrac{1}{A_0}\)

多项式 \(\ln\)

假设 \(B(x)=\ln A(x)\),那么注意到在我们 NTT 逆元时,我们采用了求导,再积分回去的做法,即 \(B’(x)=\dfrac{A’(x)}{A(x)}\),因此我们只需对 \(A(x)\) 求一遍逆,再积分回去即可,不过事实上还有更简洁(常数更小)的推法,具体来说

\[B'(x)A(x)=A'(x)
\]
\[(n+1)A_{n+1}=\sum\limits_{i=0}^nB_{i+1}(i+1)A_{n-i}
\]
\[B_{n+1}(n+1)A_0=A_{n+1}(n+1)-\sum\limits_{i=0}^{n-1}B_{i+1}(i+1)A_{n-i}
\]
\[B_{n+1}=\dfrac{A_{n+1}(n+1)-\sum\limits_{i=1}^{n}iB_iA_{n+1-i}}{A_0(n+1)}
\]
\[B_n=\dfrac{nA_n-\sum\limits_{i=1}^{n-1}iB_iA_{n-i}}{A_0n}
\]

一般在取 \(\ln\) 时默认 \(A_0=1\),因此一般来说上式也可以写作

\[B_n=A_n-\dfrac{1}{n}\sum\limits_{i=1}^{n-1}iB_iA_{n-i}
\]

多项式 \(\exp\)

根据 \(\exp\) 的性质,\(\exp’(A(x))=\exp(A(x))A(x)\),因此假设 \(B(x)=\exp(A(x))\),那么显然有

\[B'(x)=B(x)A'(x)
\]
\[B_{n+1}(n+1)=\sum\limits_{i=0}^nB_{n-i}A_{i+1}(i+1)
\]
\[B_{n+1}=\dfrac{1}{n+1}\sum\limits_{i=0}^nB_{n-i}A_{i+1}(i+1)
\]
\[B_n=\dfrac{1}{n}\sum\limits_{i=1}^{n}B_{n-i}A_ii
\]

多项式 \(\exp_{\le k}\)

对于多项式 \(A(x)\),定义其 \(\exp_{\le k}\) 为

\[\sum\limits_{i=0}^k\dfrac{A^i(x)}{i!}
\]

因此 \(\exp(A(x))\) 也可视为 \(\exp_{\le\infty}\)

那么怎么暴力求这东西呢?我们假设 \(B(x)=\sum\limits_{i=0}^k\dfrac{A^i(x)}{i!}\),那么

\[B'(x)=\sum\limits_{i=0}^k\dfrac{iA^{i-1}(x)A'(x)}{i!}
\]
\[B'(x)=\sum\limits_{i=0}^k\dfrac{A^{i-1}(x)A'(x)}{(i-1)!}
\]
\[B'(x)=A'(x)\sum\limits_{i=0}^{k-1}\dfrac{A^{i}(x)}{i!}
\]

我们惊奇地发现 \(\sum\limits_{i=0}^{k-1}\dfrac{A^i(x)}{i!}=B(x)-\dfrac{A^k(x)}{k!}\)

于是

\[B'(x)=A'(x)(B(x)-\dfrac{A^k(x)}{k!})
\]

我们假设 \(C(x)=\dfrac{A^k(x)}{k!}\),那么

\[B_{n+1}(n+1)=\sum\limits_{i=0}^nA_{i+1}(i+1)(B_{n-i}-C_{n-i})
\]
\[B_{n+1}=\dfrac{1}{n+1}\sum\limits_{i=0}^nA_{i+1}(i+1)(B_{n-i}-C_{n-i})
\]
\[B_n=\dfrac{1}{n}\sum\limits_{i=1}^nA_ii(B_{n-i}-C_{n-i})
\]

边界条件 \(B_0=\sum\limits_{i=0}^k\dfrac{A_0^i}{i!}\)

各种多项式操作的 n^2 递推的更多相关文章

  1. Luogu3824 [NOI2017]泳池 【多项式取模】【递推】【矩阵快速幂】

    题目分析: 用数论分块的思想,就会发现其实就是连续一段的长度$i$的高度不能超过$\lfloor \frac{k}{i} \rfloor$,然后我们会发现最长的非$0$一段不会超过$k$,所以我们可以 ...

  2. java中对于二位数组的简单操作,进而可以递推复杂操作

    1.程序 2.结果 3.内循环的次数 arr[x].length

  3. BZOJ4451 [Cerc2015]Frightful Formula 多项式 FFT 递推 组合数学

    原文链接http://www.cnblogs.com/zhouzhendong/p/8820963.html 题目传送门 - BZOJ4451 题意 给你一个$n\times n$矩阵的第一行和第一列 ...

  4. 【XSY2730】Ball 多项式exp 多项式ln 多项式开根 常系数线性递推 DP

    题目大意 一行有\(n\)个球,现在将这些球分成\(k\) 组,每组可以有一个球或相邻两个球.一个球只能在至多一个组中(可以不在任何组中).求对于\(1\leq k\leq m\)的所有\(k\)分别 ...

  5. 【BZOJ4944】【NOI2017】泳池 概率DP 常系数线性递推 特征多项式 多项式取模

    题目大意 有一个\(1001\times n\)的的网格,每个格子有\(q\)的概率是安全的,\(1-q\)的概率是危险的. 定义一个矩形是合法的当且仅当: 这个矩形中每个格子都是安全的 必须紧贴网格 ...

  6. [JZOJ6088] [BZOJ5376] [loj #2463]【2018集训队互测Day 1】完美的旅行【线性递推】【多项式】【FWT】

    Description Solution 我们考虑将问题一步步拆解 第一步求出\(F_{S,i}\)表示一次旅行按位与的值为S,走了i步的方案数. 第二步答案是\(F_{S,i}\)的二维重复卷积,记 ...

  7. 利用Cayley-Hamilton theorem 优化矩阵线性递推

    平时有关线性递推的题,很多都可以利用矩阵乘法来解决. 时间复杂度一般是O(K3logn)因此对矩阵的规模限制比较大. 下面介绍一种利用利用Cayley-Hamilton theorem加速矩阵乘法的方 ...

  8. 【瞎讲】 Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18)

    [背诵瞎讲] Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18) 看CSP看到一题"线性递推式",不会做,去问了问zsy怎么做,他并 ...

  9. 【BZOJ-4547】小奇的集合 矩阵乘法 + 递推

    4547: Hdu5171 小奇的集合 Time Limit: 2 Sec  Memory Limit: 256 MBSubmit: 175  Solved: 85[Submit][Status][D ...

随机推荐

  1. 【UE4 C++ 基础知识】<10>资源的引用

    2种引用方式 硬引用(Hard Reference) 即对象 A 引用对象 B,并导致对象 B 在对象 A 加载时加载 硬引用过多会导致运行时很多暂时用不到的资源也被加载到内存中 大量资源会导致进程阻 ...

  2. 【UE4 设计模式】建造者模式 Builder Pattern

    概述 描述 建造者模式,又称生成器模式.是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 建造者模式将客户端与包含多个组成部分的复杂对象的创建过程分离,客户端无需知道复杂 ...

  3. Coursera Deep Learning笔记 序列模型(三)Sequence models & Attention mechanism(序列模型和注意力机制)

    参考 1. 基础模型(Basic Model) Sequence to sequence模型(Seq2Seq) 从机器翻译到语音识别方面都有着广泛的应用. 举例: 该机器翻译问题,可以使用" ...

  4. OO电梯作业总结

    (一)第五次作业 一.设计思路 生产消费者模型,输入接口是producer,调度器是tray,电梯是customer.由于只有一架电梯,所以生产消费模型满足以下条件: 一个生产者,一个消费者 托盘不为 ...

  5. HZOI帝国2019欢乐时刻

    前言: update 只是恢复一下原来手残删掉的博客,不是在水,嘤嘤嘤 update 以后改成Stack,但是之前的就懒得改了... by 10.31 为了窝的访问量大家的好心情,模仿学长搞了一个这个 ...

  6. Codeforces Round #741 (Div. 2)部分题题解

    我果然还是太菜了,就写了两道题....真是水死了.... A The Miracle and the Sleeper 简化题意:给定\(l,r\),求\(a\)%\(b\)的最大值,其中\(r> ...

  7. SpringBoot教程(学习资源)

    SpringBoot教程 SpringBoot–从零开始学SpringBoot SpringBoot教程1 SpringBoot教程2 --SpringBoot教程2的GitHub地址 SpringB ...

  8. c++ template 实现一个简单的"栈"

    一: 实现一个简单的swap 原来我们写swap一定会这样写: 对于int类型的: swap(const int &x,const int &y) { int temp; temp = ...

  9. Android 有意思的脚本(打印温度)

    https://github.com/LineageOS/android_hardware_google_pixel/blob/lineage-18.1/thermal/device.mk #!/sy ...

  10. 『与善仁』Appium基础 — 7、ADB Shell命令的使用

    目录 1.查看进程 2.查看实时资源占用情况 3.查看进程 UID 4.其它ADB Shell命令说明 Android系统是基于 Linux 内核的,也就是说Android系统的底层是Linux系统. ...