各种多项式操作的 n^2 递推

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

多项式乘法

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

多项式求逆

假设 BA 的逆元,那么显然有 AB=1,即

i=0nAiBni=[n=0]

A0Bn=i=1nAiBni(n1)

Bn=1A0i=1nAiBni

边界 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=i=0nBi+1(i+1)Ani

Bn+1(n+1)A0=An+1(n+1)i=0n1Bi+1(i+1)Ani

Bn+1=An+1(n+1)i=1niBiAn+1iA0(n+1)

Bn=nAni=1n1iBiAniA0n

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

Bn=An1ni=1n1iBiAni

多项式 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)=i=0nBniAi+1(i+1)

Bn+1=1n+1i=0nBniAi+1(i+1)

Bn=1ni=1nBniAii

多项式 expk

对于多项式 A(x),定义其 expk

i=0kAi(x)i!

因此 exp(A(x)) 也可视为 exp

那么怎么暴力求这东西呢?我们假设 B(x)=i=0kAi(x)i!,那么

B(x)=i=0kiAi1(x)A(x)i!

B(x)=i=0kAi1(x)A(x)(i1)!

B(x)=A(x)i=0k1Ai(x)i!

我们惊奇地发现 i=0k1Ai(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)=i=0nAi+1(i+1)(BniCni)

Bn+1=1n+1i=0nAi+1(i+1)(BniCni)

Bn=1ni=1nAii(BniCni)

边界条件 B0=i=0kA0ii!

posted @   tzc_wk  阅读(796)  评论(2编辑  收藏  举报
编辑推荐:
· .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
点击右上角即可分享
微信分享提示