多项式牛顿迭代
描述
给定多项式 𝐺(𝑥,𝑦)
,已知多项式 𝑓(𝑥)
 满足:
𝐺(𝑥,𝑓(𝑥))≡0(mod𝑥𝑛)
且存在数值 𝑓1
 使 𝐺(𝑥,𝑦)
 满足以下条件:
- 𝐺(0,𝑓1) =0
; - 𝜕𝐺𝜕𝑦(0,𝑓1) ≠0
。 
求出模 𝑥𝑛
 意义下的 𝑓(𝑥)
。
Newton's Method
考虑倍增。
首先当 𝑛 =1
 时,[𝑥0]𝐺(𝑥,𝑓(𝑥)) =0
 的解需要单独求出,假设中的 𝑓1
 即为一个解。
假设现在已经得到了模 𝑥⌈𝑛2⌉
 意义下的解 𝑓⌈𝑛2⌉(𝑥)
,要求模 𝑥𝑛
 意义下的解 𝑓(𝑥) =𝑓𝑛(𝑥)
。
将 𝐺(𝑥,𝑓(𝑥))
 对 𝑓(𝑥)
 在 𝑓(𝑥) =𝑓⌈𝑛2⌉(𝑥)
 处进行泰勒展开,有:
+∞∑𝑖=0𝜕𝑖𝐺𝜕𝑦𝑖(𝑥,𝑓⌈𝑛2⌉(𝑥))𝑖!(𝑓(𝑥)−𝑓⌈𝑛2⌉(𝑥))𝑖≡0(mod𝑥𝑛)
因为 𝑓(𝑥) −𝑓⌈𝑛2⌉(𝑥)
 的最低非零项次数最低为 ⌈𝑛2⌉
,故有:
∀2⩽𝑖:(𝑓(𝑥)−𝑓⌈𝑛2⌉(𝑥))𝑖≡0(mod𝑥𝑛)
则:
+∞∑𝑖=0𝜕𝑖𝐺𝜕𝑦𝑖(𝑥,𝑓⌈𝑛2⌉(𝑥))𝑖!(𝑓(𝑥)−𝑓⌈𝑛2⌉(𝑥))𝑖≡𝐺(𝑥,𝑓⌈𝑛2⌉(𝑥))+𝜕𝐺𝜕𝑦(𝑥,𝑓⌈𝑛2⌉(𝑥))[𝑓(𝑥)−𝑓⌈𝑛2⌉(𝑥)]≡0(mod𝑥𝑛)
𝑓𝑛(𝑥)≡𝑓⌈𝑛2⌉(𝑥)−𝐺(𝑥,𝑓⌈𝑛2⌉(𝑥))𝜕𝐺𝜕𝑦(𝑥,𝑓⌈𝑛2⌉(𝑥))(mod𝑥𝑛)
或者
𝑓2𝑛(𝑥)≡𝑓𝑛(𝑥)−𝐺(𝑥,𝑓𝑛(𝑥))𝜕𝐺𝜕𝑦(𝑥,𝑓𝑛(𝑥))(mod𝑥2𝑛)
例题
设给定函数为 ℎ(𝑥)
,有:
𝐺(𝑥,𝑦)=1𝑦−ℎ(𝑥)
应用 Newton's Method 可得:
𝑓2𝑛(𝑥)≡𝑓𝑛(𝑥)−1/𝑓𝑛(𝑥)−ℎ(𝑥)−1/𝑓2𝑛(𝑥)(mod𝑥2𝑛)≡2𝑓𝑛(𝑥)−𝑓2𝑛(𝑥)ℎ(𝑥)(mod𝑥2𝑛)
时间复杂度
𝑇(𝑛)=𝑇(𝑛2)+𝑂(𝑛log𝑛)=𝑂(𝑛log𝑛)
设给定函数为 ℎ(𝑥)
,有:
𝐺(𝑥,𝑦)=𝑦2−ℎ(𝑥)≡0
应用 Newton's Method 可得:
𝑓2𝑛(𝑥)≡𝑓𝑛(𝑥)−𝑓2𝑛(𝑥)−ℎ(𝑥)2𝑓𝑛(𝑥)(mod𝑥2𝑛)≡𝑓2𝑛(𝑥)+ℎ(𝑥)2𝑓𝑛(𝑥)(mod𝑥2𝑛)
时间复杂度
𝑇(𝑛)=𝑇(𝑛2)+𝑂(𝑛log𝑛)=𝑂(𝑛log𝑛)
设给定函数为 ℎ(𝑥)
,有:
𝐺(𝑥,𝑦)=ln𝑦−ℎ(𝑥)
应用 Newton's Method 可得:
𝑓2𝑛(𝑥)≡𝑓𝑛(𝑥)−ln𝑓𝑛(𝑥)−ℎ(𝑥)1/𝑓𝑛(𝑥)(mod𝑥2𝑛)≡𝑓𝑛(𝑥)(1−ln𝑓𝑛(𝑥)+ℎ(𝑥))(mod𝑥2𝑛)
时间复杂度
𝑇(𝑛)=𝑇(𝑛2)+𝑂(𝑛log𝑛)=𝑂(𝑛log𝑛)
手算演示
为了方便理解,这里举几个例子演示一下算法流程。
复数多项式模多项式的平方根
假设 ℎ
 是一个不被 𝑥
 整除(有常数项)的复数多项式,求它对模 𝑥𝑛
 的平方根。
我们有方程:
𝐺(𝑓(𝑥))=𝑓2(𝑥)−ℎ(𝑥)≡0(mod𝑥𝑛)
Taylor 展开 𝐺
 得到下式。注意这里是对 𝑓
 的展开,所以导数都是对 𝑓
 的偏导数,𝑥
 在这里是当成常数算的。
𝐺(𝑓(𝑥))=+∞∑𝑖=0𝐺(𝑖)(𝑓0(𝑥))𝑖!(𝑓(𝑥)−𝑓0(𝑥))𝑖=𝐺(𝑓0(𝑥))+2𝑓0(𝑥)(𝑓(𝑥)−𝑓0(𝑥))+(𝑓(𝑥)−𝑓0(𝑥))2
用倍增计算。假设倍增中的中间结果是 𝑓0(𝑥),𝑓1(𝑥),…,𝑓𝑗(𝑥)
,或者数学严谨地说 𝑓𝑗(𝑥)
 是满足 𝐺(𝑓𝑗(𝑥)) ≡0(mod𝑥2𝑗)
 的一个复数多项式,且为了唯一性它同时满足以下两个条件:
- 𝑓𝑗(𝑥)
 次数不超过 𝑥2𝑗
; - 𝑓𝑗+𝑘(𝑥) −𝑓𝑗(𝑥) ≡0(mod𝑥2𝑗)
,对所有 𝑘
。 
把 𝑓𝑗+1(𝑥)
 和 𝑓𝑗(𝑥)
 代入上面的式子就有:
𝐺(𝑓𝑗+1(𝑥))=𝐺(𝑓𝑗(𝑥))+2𝑓𝑗(𝑓𝑗+1(𝑥)−𝑓𝑗(𝑥))+(𝑓𝑗+1(𝑥)−𝑓𝑗(𝑥))2≡0(mod𝑥2𝑗+1)
显然 𝑓𝑗+1(𝑥) −𝑓𝑗(𝑥)
 必然是 𝑥2𝑗
 的倍数。于是得到
𝑓𝑗+1(𝑥)≡𝑓𝑗(𝑥)−𝑓2𝑗(𝑥)−ℎ(𝑥)2𝑓𝑗(𝑥)≡𝑓𝑗(𝑥)2+ℎ(𝑥)2𝑓𝑗(𝑥)(mod𝑥2𝑗+1)
如果 𝑓𝑗(𝑥)
 存在,那么 2𝑓𝑗(𝑥)
 不被 𝑥
 整除(有常数项),所以必然有模 𝑥2𝑗+1
 的逆元。因此数列 𝑓0,𝑓1…,𝑓𝑗
 存在当且仅当 𝑓0
 存在。不被 𝑥
 整除的复数多项式 ℎ(𝑥)
 模 𝑥
 的平方根是一定存在的,因为 ℎ(𝑥)
 模掉 𝑥
 就是个普通非零复数,一定有两个平方根。所以可以对所有有常数项的 ℎ(𝑥)
 用这个算法。
选 ℎ(𝑥) =𝑥 +1
 举例计算如下:
- 𝑓0(𝑥) =1
,𝑓1(𝑥) =12+𝑥+12×1mod  𝑥2 =12𝑥 +1
,𝑓2(𝑥) =(12𝑥+1)2+𝑥+12×(12𝑥+1)mod  𝑥4 =116𝑥3 −18𝑥2 +12𝑥 +1
,…
 - 𝑓0(𝑥) = −1
,𝑓1(𝑥) =(−1)2+𝑥+12×(−1)mod  𝑥2 = −12𝑥 −1
,…
(等于前一个取负) 
可以验证两个都是正确的模平方根多项式列。
整数模素数幂的平方根
牛顿迭代算法还可以迁移到整数模素数的幂的情况。 假设 ℎ
 是一个不被 3 整除的「方便的」整数。(「方便」指「必然有解」,具体条件后文再言)假设要算 ℎ
 在模 3𝑛
 意义下的平方根 𝑓
。有方程:
𝐺(𝑓)=𝑓2−ℎ≡0(mod3𝑛)
Taylor 展开 𝐺
 得到:
𝐺(𝑓)=+∞∑𝑖=0𝐺(𝑖)(𝑓0)𝑖!(𝑓−𝑓0)𝑖=𝐺(𝑓0)+2𝑓0(𝑓−𝑓0)+(𝑓−𝑓0)2
用倍增计算。假设倍增中得到的中间结果是 𝑓0,𝑓1,…,𝑓𝑗
,或者严谨地说 𝑓𝑗
 是满足 𝐺(𝑓𝑗) ≡0(mod32𝑗)
 的一个整数,且为了唯一性它同时满足以下两个条件:
- 0 <𝑓𝑗 <32𝑗
; - 𝑓𝑗+𝑘 −𝑓𝑗 ≡0(mod32𝑗)
,对所有 𝑘
。 
把 𝑓𝑗+1
 和 𝑓𝑗
 代入上面的式子就有:
𝐺(𝑓𝑗+1)=𝐺(𝑓𝑗)+2𝑓𝑗(𝑓𝑗+1−𝑓𝑗)+(𝑓𝑗+1−𝑓𝑗)2≡0(mod32𝑗+1)
显然 𝑓𝑗+1 −𝑓𝑗
 必然是 32𝑗
 的倍数。于是得到
𝑓𝑗+1≡𝑓𝑗−𝑓2𝑗−ℎ2𝑓𝑗≡𝑓2𝑗+ℎ2𝑓𝑗(mod32𝑗+1)
如果 𝑓𝑗
 存在,那么 2𝑓𝑗
 不被 3
 整除,所以必然有模 32𝑗+1
 的逆元。因此数列 𝑓0,𝑓1…,𝑓𝑗
 存在当且仅当 𝑓0
 存在。不被 3 整除的整数 ℎ
 模 3
 的平方根要么不存在,要么有两个。所以 ℎ
 有模 3
 平方根就是整个算法能跑的唯一条件。
这里选 ℎ =46
 实际计算示例。
- 𝑓0 =1
,𝑓1 =12+462×1mod  9 =1
,𝑓2 =12+462×1mod  81 =64
,𝑓3 =642+462×64mod  6561 =955
,…
 - 𝑓0 =2
,𝑓1 =22+462×2mod  9 =8
,𝑓2 =82+462×8mod  81 =17
,𝑓3 =172+462×17mod  6561 =5606
,…
(等于前一个取负) 
可以验证一下两个都是正确的模平方根数列。
代数证明
这一节对前文进行引申,用抽象代数的语言证明只要 𝑓
 满足初始解条件,牛顿法对所有的 𝑛
 都能给出解,并且可以得到全部的解。
有解的证明
引理 1
 设 整环 𝑅
 有多项式或 形式幂级数 𝑓(𝑋) =∑𝑖≥0𝑎𝑖𝑋𝑖
 和 𝑟,𝑝 ∈𝑅
 使得 𝑓(𝑟) ∈𝑅𝑝
(亦即 𝑟
 是 𝑓(𝑋)
 在模 𝑝
 意义下的根)且 𝑓′(𝑟) ∈𝑅
 在模 𝑝
 意义下是可逆的。这里 𝑓′(𝑋) :=∑𝑖≥0(𝑖 +1)𝑎𝑖+1𝑋𝑖
 是 𝑓(𝑋)
 的 形式导数。那么 𝑓(𝑟−𝑓(𝑟)𝑓′(𝑟)) ≡0(mod𝑝2)
。
证明
 对所有 𝑠 ∈𝑅
,
 𝑓(𝑟+𝑠𝑝)=∑𝑖≥0𝑎𝑖(𝑟+𝑠𝑝)𝑖=∑𝑖≥0𝑎𝑖𝑟𝑖+𝑠𝑝∑𝑖≥1𝑖𝑎𝑖𝑟𝑖−1+𝑠2𝑝2(…)=𝑓(𝑟)+𝑠𝑝𝑓′(𝑟)+𝑠2𝑝2(𝑓″(𝑟)2!+⋯),
 所以
 𝑓(𝑟+𝑠𝑝)∈𝑅𝑝2⟺𝑓(𝑟)+𝑓′(𝑟)𝑠𝑝∈𝑅𝑝2
 因为 𝑓(𝑟) ∈𝑅𝑝
,且 𝑓′(𝑟)
 可逆,所以取 𝑠𝑝 = −𝑓(𝑟)𝑓′(𝑟)
 即可,这里 1𝑓′(𝑟)
 是模 𝑝2
 意义下的逆元。因为 𝑓′(𝑟)
 在模 𝑝
 意义下可逆,所以它在模 𝑝2
 意义下也必定存在逆元:设有 𝑎,𝑏,𝑐 ∈𝑅
 使 𝑎𝑓′(𝑟) =𝑏𝑝 +1
 和 𝑓(𝑟) =𝑐𝑝
,那么 (𝑎2𝑓′(𝑟)−2)𝑓′(𝑟) =𝑏2𝑝2 +1
,故可以取 𝑠 =𝑐(2 −𝑎2𝑓′(𝑟))
。
对于域 𝑘
 上的多项式环 𝑘[𝑋]
,设有 𝐺(𝑋,𝑌) ∈𝑘[𝑋,𝑌]
 和 𝑓𝑛 ∈𝑘[𝑋]
 使 𝐺(𝑋,𝑓𝑛(𝑋)) ∈𝑘[𝑋]𝑋𝑛
,那么应用引理 1 就可得到
𝐺(𝑋,𝑓𝑛(𝑋)−𝐺(𝑋,𝑓𝑛(𝑋))𝜕𝐺𝜕𝑌(𝑋,𝑓𝑛(𝑋)))≡0(mod𝑋2𝑛)
而倍增的初始条件只要有 𝑓1 ∈𝑘
 使得 𝐺(𝑋,𝑓1) ≡0(mod𝑋)
 和 𝜕𝐺𝜕𝑌(𝑋,𝑓1) ≢0(mod𝑋)
。后一个条件保证了 𝜕𝐺𝜕𝑌
 有非零常数项,同时因为 𝑋∣𝐺(𝑋,𝑓𝑛(𝑋))𝜕𝐺𝜕𝑌(𝑋,𝑓𝑛(𝑋))
,故而对所有的 𝑛
,𝜕𝐺𝜕𝑌(𝑋,𝑓𝑛)
 总是模 𝑋𝑛
 意义下可逆的,也就满足了下一次迭代的条件。
得到全部解的证明
引理 2
 若 𝑅
 为 UFD,𝑓,𝑟,𝑝
 定义同引理 1。则引理 1 给出的 𝑟 −𝑓(𝑟)𝑓′(𝑟)
 是模 𝑝2
 意义下唯一满足以下两条件的 𝑥
 的值:
 - 𝑓(𝑥) ∈𝑅𝑝2

 - 𝑥 −𝑟 ∈𝑅𝑝

 
 亦即
 ∀𝑥∈𝑅,𝑝2∣𝑓(𝑥)∧𝑝∣(𝑥−𝑟)⟹𝑥≡𝑟−𝑓(𝑟)𝑓′(𝑟)(mod𝑝2)
证明
 令 𝑠 = −𝑓(𝑟)𝑓′(𝑟)𝑝
 和 𝑢 =𝑟 +𝑠𝑝
,引理 1 保证 𝑢
 满足两个条件,且 𝑓(𝑟) +𝑓′(𝑟)𝑠𝑝 ∈𝑅𝑝2
。 设 𝑣
 是满足上述条件的值,则有 𝑣 =𝑟 +𝑡𝑝
 和 𝑓(𝑟) +𝑓′(𝑟)𝑡𝑝 ∈𝑅𝑝2
。 于是有 𝑓′(𝑟)(𝑡 −𝑠)𝑝 ∈𝑅𝑝2
 和 𝑣 −𝑢 ∈𝑅𝑝2
。
牛顿法可以保证得到模 𝑋2𝑛
 的全部解。假设 𝐺(𝑋,ℎ) ≡0(mod𝑋2𝑛)
,那么令 ℎ2𝑖 :=ℎ(mod𝑋2𝑖)
,然后取 𝑓1 =ℎ1
 并用牛顿法,根据引理 2 可得 𝑓2𝑖 ≡ℎ2𝑖(mod𝑋2𝑖)
,所以一定有 𝑓2𝑛 =ℎ
。
上面的论证也说明了,在 𝜕𝐺𝜕𝑦(0,𝑦)
 永远可逆时,𝐺(𝑋,𝑓) ≡0(mod𝑋𝑛)
 的解的个数等于 𝐺(0,𝑓) ≡0(mod𝑋)
 的解的个数。这个结论并非平凡。请看下面的例子。
牛顿法无效时解的个数随次数而变多的例子
 模 𝑋
 意义下 𝑋2
 的平方根只有 0
,但是模 𝑋4
 意义下 𝑋2
 的平方根有 𝑋, −𝑋,𝑋3 +𝑋,…
。
本页面最近更新:2025/5/3 19:43:25,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:fps5283, Marcythm, 97littleleaf11, shuzhouliu, Enter-tainer, H-J-Granger, Ir1d, TrisolarisHD, abc1763613206, c-forrest, CCXXXI, EndlessCheng, Great-designer, hly1204, hsfzLZH1, huayucaiji, kenlig, ksyx, ouuan, SamZhangQingChuan, sshwy, StudyingFather, test12345-pupil, Tiphereth-A, untitledunrevised, zjkmxy
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用