zszz,使用 NTT 可以在 O(nlogn) 的时间内求出两个多项式的卷积、以及一个多项式的 inv,ln,exp,sqrt 等,但是如果模数不是 NTT 模数(譬如 109+7)并且复杂度允许 O(n2) 实现上述操作,那么再使用 nlogn 的 NTT 优化版多项式全家桶就不合适了,因此我们也要懂得如何暴力 n2 递推。
多项式乘法
这个就过于弱智了吧……直接枚举对应位然后往它们的和的地方贡献即可,这个幼儿园就学过了(
多项式求逆
假设 B 为 A 的逆元,那么显然有 AB=1,即
n∑i=0AiBn−i=[n=0]
即
A0Bn=−n∑i=1AiBn−i(n≥1)
Bn=−1A0n∑i=1AiBn−i
边界 B0=1A0
多项式 ln
假设 B(x)=lnA(x),那么注意到在我们 NTT 逆元时,我们采用了求导,再积分回去的做法,即 B′(x)=A′(x)A(x),因此我们只需对 A(x) 求一遍逆,再积分回去即可,不过事实上还有更简洁(常数更小)的推法,具体来说
B′(x)A(x)=A′(x)
(n+1)An+1=n∑i=0Bi+1(i+1)An−i
Bn+1(n+1)A0=An+1(n+1)−n−1∑i=0Bi+1(i+1)An−i
Bn+1=An+1(n+1)−n∑i=1iBiAn+1−iA0(n+1)
Bn=nAn−n−1∑i=1iBiAn−iA0n
一般在取 ln 时默认 A0=1,因此一般来说上式也可以写作
Bn=An−1nn−1∑i=1iBiAn−i
多项式 exp
根据 exp 的性质,exp′(A(x))=exp(A(x))A(x),因此假设 B(x)=exp(A(x)),那么显然有
B′(x)=B(x)A′(x)
Bn+1(n+1)=n∑i=0Bn−iAi+1(i+1)
Bn+1=1n+1n∑i=0Bn−iAi+1(i+1)
Bn=1nn∑i=1Bn−iAii
多项式 exp≤k
对于多项式 A(x),定义其 exp≤k 为
k∑i=0Ai(x)i!
因此 exp(A(x)) 也可视为 exp≤∞
那么怎么暴力求这东西呢?我们假设 B(x)=k∑i=0Ai(x)i!,那么
B′(x)=k∑i=0iAi−1(x)A′(x)i!
B′(x)=k∑i=0Ai−1(x)A′(x)(i−1)!
B′(x)=A′(x)k−1∑i=0Ai(x)i!
我们惊奇地发现 k−1∑i=0Ai(x)i!=B(x)−Ak(x)k!
于是
B′(x)=A′(x)(B(x)−Ak(x)k!)
我们假设 C(x)=Ak(x)k!,那么
Bn+1(n+1)=n∑i=0Ai+1(i+1)(Bn−i−Cn−i)
Bn+1=1n+1n∑i=0Ai+1(i+1)(Bn−i−Cn−i)
Bn=1nn∑i=1Aii(Bn−i−Cn−i)
边界条件 B0=k∑i=0Ai0i!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App