基础篇戳这里。
大概是记录 @Tiw 的伟大智慧叭。
嗷,附赠一个 全家桶题。
Newton 迭代法
解多项式方程
f(u,x)≡0(modxn)
其中 u 是一个多项式。
用倍增的思想。设
un≡0(modxn)
现要求 u2n。显然 u2n 亦有 u2n≡0(modxn),所以对于 k∈[2,+∞)∩N,有 (u2n−un)k≡0(modx2n)。考虑在modx2n 意义下把 f(u2n,x) Tayler 展开,有
f(u2n,x)=+∞∑i=0f(i)u(un)i!(u2n−un)i≡0(modx2n)
根据上文结论,得到:
f(u2n,x)=f(un,x)+f′u(un,x)⋅(u2n−un)≡0(modx2n)
最终有
u2n=un−f(un,x)fu(un,x)(modx2n)
附赠例题(密码 ltytxdy
)。
多项式乱算
该 来 的 还 是 来 了!
多项式求逆
给定多项式 v,求满足 uv≡1(modxn) 的 u。
迭代思想。
{unv≡1(modxn)u2nv≡1(modx2n)⇒ (u2n−un)2≡0(modx2n)⇒ u22n−2u2nun+u2n≡0(modx2n)⇒ u2n−2un+u2nv≡0(modx2n)⇒ u2n≡un(2−unv)(modx2n)
O(nlogn) 计算即可。
多项式 ln
给定多项式 v,保证 v0=1,求 u≡lnv(modxn)。
直接(?)法:
u=∫v′ln′v dx=∫v′vdx
对多项式求导和积分都是 O(n) 的,所以求个逆就 O(nlogn) 算出来啦。
多项式 exp
给定多项式 v,保证 v0=0,求 u≡expv(modxn)。
方便求导的家伙直接丢到牛迭里去。(
解方程 f(u,x)=ln(u)−v≡0(modxn),牛迭式:
u2n≡un−ln(un)−v1un=un(1−ln(un)+v)(modx2n)
单次求 ln 和卷积,还是 O(nlogn)。
多项式开根
给定多项式 v,求 u≡v12(modxn)。
牛迭,解 f(u,x)=u2−v≡0(modxn),有:
u2n=un−u2n−v2un=u2n+v2un(modx2n)
单次卷积和求逆,复杂度 O(nlogn)。
多项式带余除法
给定多项式 u,v,求 u≡vp+r(modxn),且 degr<degv。(degu 表示 u 的最高次。)
考虑一个灵性的变换,对于任意多项式 u,令其“翻转”多项式为 ur,有:
ur=xdeguu(x−1)
显然翻转操作对于加法和卷积都是可分配的。
把翻转作用于原式两边,得到:
ur≡vrpr+xdegu−degv+1rr(modxn)
又由于 degpr=degu−degv,所以把模数换成 xdegu−degv+1,后一项直接模掉,求出来的还是 pr,即:
pr≡urvr(modxdegu−degv+1)
求出 pr,瞎算算就求到 p 和 r 了,复杂度还是 O(nlogn)。
多项式快速幂
给定多项式 v 和整数 k,求 u=vk(modxn)。
假设我们能够对 v 求 ln,则左右同时 ln 再 exp 得到:
u=exp(klnv)
O(nlogn) 搞定。
可惜有时候求不得,需要把 v0 调整成 1。位移+系数提公因数即可。
多项式三角函数
给定多项式 v,求 u=sinv(或 cosv 等)。
Euler 公式:
eix=cosx+isinx
考虑对称性,也有:
e−ix=cosx−isinx
把多项式 v 代入,求出 eiv 和 e−iv,就能直接解出 sinv 和 cosv。
虚数单位 i 即 ω14,用原根替代单位根即可。复杂度 O(nlogn)。
常系数齐次线性递推
Link.
求一个满足 m 阶齐次线性递推数列 {a} 的第 n 项,即求
an=m∑i=1fian−i
不用多项式取模的做法。
根据条件式子得到:
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)=1−F(x)⇒ A(x)=P(x)Q(−x)Q(x)Q(−x)
对于任意奇数 k,考虑 Q(x)Q(−x) 的 k 次项:
[xk]Q(x)Q(−x)=k∑i=0(−1)iqiqk−i
由于 2/|k,故 (−1)iqiqk−i+(−1)k−iqk−iqi=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 的博客。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现