多项式全家桶

传送门:FFT 学习笔记NTT 学习笔记

分治 FFT

例题

给定序列 {gn1},对于序列 {fn},有:

fn={1n=1j=1n1fjgijn>1

求出 i=1,2,,nfi998244353 取模的结果。

简单的分治应用,就像用 CDQ 分治做 DP 那样,考虑对序列 f 分治。即对于一个分治区间 [l,r),考虑先递归左边计算出左边的 f 值,接着算左边区间乘上 g 对右边的贡献,最后递归右边。

而对于一些类似于 fn=1ni=1n1figni 的计算,可以发现递归到底层(即 l+1=r 时)是按照从左往右的顺序,于是在底层时再把 f 的值处理了就可以了。

时间复杂度为 T(n)=2T(n2)+O(nlogn),根据主定理可得 T(n)=O(nlog2n)

多项式牛顿迭代

泰勒展开

对于一个非多项式函数,有时我们难以去分析和计算它,这时候我们可以用泰勒展开。泰勒展开其实就是用一个多项式函数 f 去拟合一个函数 g,其做法是:

  • 选择一个拟合点 x0
  • 如果 f=g,那么在 x0 点的值应该相等,故 f(x0)=g(x0)
  • 如果 f=g,那么在 x0 点的变化趋势应该相同,故 f(x0)=g(x0)
  • 如果 f=g,那么在 x0 点的导函数的变化趋势应该相同,故 f(x0)=g(x0)

根据这种思想,我们得到了泰勒展开式:

g(x)=n01n!f(n)(x0)(xx0)n

特别地,取拟合点 x0=0 时得到麦克劳林展开式:

g(x)=n01n!f(n)(0)xn

牛顿迭代

牛顿迭代可以推导出多项式的很多公式,通过倍增法可以 O(nlogn) 地对多项式操作。

首先考虑实数域 R 上的牛顿迭代,牛顿迭代用于求出函数 f(x) 的零点,即 f(x)=0 的解。流程为:

  • 最开始取一个点 x0
  • 只取泰勒展开的前两项,有方程 f(x1)=f(x0)+f(x0)(x1x0)=0,得到公式 x1=x0f(x0)f(x0) 从而求得 x1
  • x1 继续往下迭代:x2=x1f(x1)f(x1)
  • xi+1=xif(xi)f(xi)

由于泰勒展开每次求导都会使拟合的函数图像更接近原函数,所以 xi+1 一定比 xi 更接近 0 点。

应用:求解 n 的平方根,可以构造函数 f(x)=x2n,运用牛顿迭代求解其零点,有 xi+1=xixi2n2xixi+1=12(xinxi)。(其实就是每次求 xi 点的切线方程的解)

现在考虑在多项式域 F 上的牛顿迭代,仍然考虑在 f0 处的泰勒展开:

F(f)=k01k!F(k)(f0)(ff0)n

我们想要求 F(f)0(modxN) 的解,设解为 fa。假设 F(f0)0(modxn),则 f0fa(modxn)。在 f0 点处泰勒展开,那么就有:

F(f1)F(f0)+F(f0)(f1f0)0(modx2n)

省略了 k2 的项的原因是,因为有 f1fa(modx2n)f0fa(modxn),故 f1f00(modxn),所以当 k2(f1f0)k0(modxkn)

故可以推出 f1f0F(f0)F(f0)(modx2n)。我们只需要最开始构造出 f0 使其满足 F(f0)0(modx),接着不断迭代,直到 nN 时,我们就能求出原方程的解。

多项式牛顿迭代有下面几个应用。

多项式求逆

目标是求得多项式 g(x) 的逆多项式 g1(x),构造函数 F(f)=f1g,显然有 F(1g0)(1g0)1g0(modx)。根据牛顿迭代,有:

f1f0+f01gf02(modx2n)f1f0(2f0g)(modx2n)

时间复杂度 O(nlogn)

多项式开根

要求 g(x),于是构造函数 F(f)=f2g,有 F(g0)0(modx)。根据牛顿迭代,有:

f1f0f02g2f0(modx2n)f112(f0+f01g)(modx2n)

时间复杂度 O(nlogn)

多项式 ln

这个可以不用多项式牛顿迭代,直接推式子:

lnf=dlnf=f1dx

于是求导、求逆、积分即可,时间复杂度 O(nlogn)

多项式 exp

要求 expg,构造函数 F(f)=lnfg,有 g0=0,故 F(1)0modx。根据牛顿迭代,有:

f1f0lnf0gf01(modx2n)f1f0(1f0+g)(modx2n)

时间复杂度 O(nlogn)

多项式快速幂

g0=1,那么 gk 次幂可以这样得出:

gk=exp(klng)

对于 g01 的情况,找出最低次项把它提出来即可。

对于 kmod 的情况,有 gkgkmod(p1)(modxn)

时间复杂度 O(nlogn)

作者:CTHOOH

出处:https://www.cnblogs.com/CTHOOH/p/18662644

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   CTHOOH  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示