Live2D

Note - 多项式乱写

  基础篇戳这里

  大概是记录 @Tiw 的伟大智慧叭。

  嗷,附赠一个 全家桶题

Newton 迭代法

  解多项式方程

f(u,x)0(modxn)

  其中 u 是一个多项式。


  用倍增的思想。设

un0(modxn)

  现要求 u2n。显然 u2n 亦有 u2n0(modxn),所以对于 k[2,+)N,有 (u2nun)k0(modx2n)。考虑在modx2n 意义下把 f(u2n,x) Tayler 展开,有

f(u2n,x)=i=0+fu(i)(un)i!(u2nun)i0(modx2n)

  根据上文结论,得到:

f(u2n,x)=f(un,x)+fu(un,x)(u2nun)0(modx2n)

  最终有

u2n=unf(un,x)fu(un,x)(modx2n)

  附赠例题(密码 ltytxdy)。

多项式乱算

  该 来 的 还 是 来 了!

多项式求逆

  给定多项式 v,求满足 uv1(modxn)u


  迭代思想。

{unv1(modxn)u2nv1(modx2n)    (u2nun)20(modx2n)    u2n22u2nun+un20(modx2n)    u2n2un+un2v0(modx2n)    u2nun(2unv)(modx2n)

  O(nlogn) 计算即可。

多项式 ln

  给定多项式 v,保证 v0=1,求 ulnv(modxn)


  直接(?)法:

u=vlnv dx=vvdx

  对多项式求导和积分都是 O(n) 的,所以求个逆就 O(nlogn) 算出来啦。

多项式 exp

  给定多项式 v,保证 v0=0,求 uexpv(modxn)


  方便求导的家伙直接丢到牛迭里去。(

  解方程 f(u,x)=ln(u)v0(modxn),牛迭式:

u2nunln(un)v1un=un(1ln(un)+v)(modx2n)

  单次求 ln 和卷积,还是 O(nlogn)

多项式开根

  给定多项式 v,求 uv12(modxn)


  牛迭,解 f(u,x)=u2v0(modxn),有:

u2n=unun2v2un=un2+v2un(modx2n)

  单次卷积和求逆,复杂度 O(nlogn)

多项式带余除法

  给定多项式 u,v,求 uvp+r(modxn),且 degr<degv。(degu 表示 u 的最高次。)


  考虑一个灵性的变换,对于任意多项式 u,令其“翻转”多项式为 ur,有:

ur=xdeguu(x1)

  显然翻转操作对于加法和卷积都是可分配的。

  把翻转作用于原式两边,得到:

urvrpr+xdegudegv+1rr(modxn)

  又由于 degpr=degudegv,所以把模数换成 xdegudegv+1,后一项直接模掉,求出来的还是 pr,即:

prurvr(modxdegudegv+1)

  求出 pr,瞎算算就求到 pr 了,复杂度还是 O(nlogn)

多项式快速幂

  给定多项式 v 和整数 k,求 u=vk(modxn)


  假设我们能够对 vln,则左右同时 lnexp 得到:

u=exp(klnv)

  O(nlogn) 搞定。

  可惜有时候求不得,需要把 v0 调整成 1。位移+系数提公因数即可。

多项式三角函数

  给定多项式 v,求 u=sinv(或 cosv 等)。

  Euler 公式:

eix=cosx+isinx

  考虑对称性,也有:

eix=cosxisinx

  把多项式 v 代入,求出 eiveiv,就能直接解出 sinvcosv

  虚数单位 iω41,用原根替代单位根即可。复杂度 O(nlogn)

常系数齐次线性递推

  Link.

  求一个满足 m 阶齐次线性递推数列 {a} 的第 n 项,即求

an=i=1mfiani


  不用多项式取模的做法。

  根据条件式子得到:

A(x)=F(x)A(x)+P(x)

  P(x) 某个多项式,用于修补低次项。

  变形:

A(x)=F(x)A(x)+P(x)    A(x)=P(x)Q(x)    let Q(x)=1F(x)    A(x)=P(x)Q(x)Q(x)Q(x)

  对于任意奇数 k,考虑 Q(x)Q(x)k 次项:

[xk]Q(x)Q(x)=i=0k(1)iqiqki

  由于 2|k,故 (1)iqiqki+(1)kiqkiqi=0,原式为 0,即 Q(x)Q(x) 仅含偶次项。不妨令 R(x2)=Q(x)Q(x),代入变形:

A(x)=P(x)Q(x)R(x2)A(x)=E(x2)R(x2)+xO(x2)R(x2)    let {E(x)=i[x2i]P(x)Q(x)xiO(x)=i[x2i+1]P(x)Q(x)xi

  我们要求的只是 [xn]A(x) 而非整个 A(x),所以只需要根据 n 的奇偶性递归到其中一边求解。复杂度仍然是 O(mlogmlogn),不过常数会小很多。

  此算法基础上的更多卡常技巧请见 EI 的博客

posted @   Rainybunny  阅读(151)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示