首页 > 其他分享 >【瞎口胡】多项式牛顿迭代

【瞎口胡】多项式牛顿迭代

时间:2022-09-01 17:23:38浏览次数:93  
标签:迭代 pmod 多项式 瞎口 牛顿 dfrac equiv

前言

如果完全不会求导和积分,以及泰勒展开,这里有一个实用性很强的教程 3blue1brown - 微积分的本质

多项式牛顿迭代

给定函数 \(G(x)\),求多项式 \(F(x)\) 使得 \(G(F(x)) \equiv 0 \pmod {x^n}\)。

当 \(n=1\) 时,可以单独求出 \([x_0]F(x)\)(大部分问题中该解易求)。

考虑已经得到模 \(x^{\left \lceil \frac n2 \right \rceil}\) 意义下的解,如何求出模 \(x^n\) 意义下的解。

将 \(G(F(x))\) 在 \(F_0(x)\) 处泰勒展开,有

\[\sum \limits_{i=0}^{+\infty} \dfrac{G^{(i)}(F_0(x))}{i!}(F(x)-F_0(x))^i \equiv 0 \pmod {x^n} \]

其中,\(G^{(i)}\) 表示 \(G\) 的 \(i\) 阶导函数

而 \(F(x)-F_0(x)\) 的最高次数非零项的次数肯定大于 \(\left \lceil \dfrac{n}{2} \right \rceil\),所有 \(i>1\) 的项在模 \(x^n\) 意义下都会变成 \(0\)。

于是,上式等价于

\[G(F_0(x)) + G'(F_0(x))(F(x)-F_0(x)) \equiv 0 \pmod {x^n} \]

整理得

\[F(x) \equiv F_0(x) - \dfrac{G(F_0(x))}{G'(F_0(x))} \pmod {x^n} \]

应用 1 多项式求逆

给定 \(H(x)\) 求 \(F(x)\) 使得 \(F(x)H(x) \equiv 1 \pmod {x^n}\)。(使用 \(H\) 是为了和多项式牛顿迭代中的 \(G\) 区分)

有方程

\[G(F(x)) \equiv \dfrac{1}{F(x)} - H(x) \equiv 0 \pmod {x^n} \]

牛顿迭代,得

\[F(x) \equiv F_0(x) - \dfrac{G(F_0(x))}{G'(F_0(x))} \pmod{x^n} \]

\[F(x) \equiv F_0(x) - \dfrac{\frac{1}{F_0(x)}-H(x)}{-\frac{1}{F_0^2(x)}} \pmod{x^n} \]

\[F(x) \equiv 2F_0(x)-F_0^2(x)H(x) \pmod{x^n} \]

\[F(x) \equiv F_0(x)(2-F_0(x)H(x)) \pmod{x^n} \]

递归求解即可。边界:\(n=0\) 时需要求解该项系数的乘法逆元。

应用 2 多项式开根

给定 \(H(x)\) 求 \(F(x)\) 使得 \(F^2(x) \equiv 1 \pmod {x^n}\)。

使用牛顿迭代,有方程

\[G(F(x)) \equiv F^2(x)-H(x) \equiv 0 \pmod {x^n} \]

\[F(x) \equiv F_0(x) - \dfrac{F_0^2(x)-H(x)}{2F_0(x)} \pmod{x^n} \]

\[F(x) \equiv F_0(x) +\dfrac{H(x)-F_0^2(x)}{2F_0(x)} \pmod{x^n} \]

\[F(x) \equiv \dfrac{H(x)+F_0^2(x)}{2F_0(x)} \pmod{x^n} \]

\[F(x) \equiv \dfrac 12\left(\dfrac{H(x)}{F_0(x)}+F_0(x) \right)\pmod{x^n} \]

每层求逆即可,复杂度不变。注意这个时候 NTT 要在模 \(x^{2n}\) 意义下做,因为 \(H(x),\dfrac{1}{F_0(x)}\) 在模 \(x^n\) 意义下都是 \(n-1\) 次多项式。

应用 3 多项式 exp

给定 \(H(x)\) 求 \(F(x)\) 使得 \(\exp H(x) \equiv F(x) \pmod {x^n}\)。

使用牛顿迭代,有方程

\[G(F(x)) \equiv \ln F(x) - H(x) \equiv 0 \pmod {x^n} \]

\[F(x) \equiv F_0(x) - \dfrac{\ln F_0(x) - H(x)}{\frac{1}{F_0(x)}} \pmod {x^n} \]

\[F(x) \equiv F_0(x)(1-\ln F_0(x) + H(x))\pmod {x^n} \]

\(n=0\) 的时候要检查 \([x^0]H(x)\) 是不是等于 \(0\),不是 \(0\) 就寄了,这种情况下 \(e^x\) 是个超越数,不能在模意义下被表示出来。同时注意,NTT 要在模 \(x^{2n}\) 意义下做。

标签:迭代,pmod,多项式,瞎口,牛顿,dfrac,equiv
From: https://www.cnblogs.com/liuzongxin/p/16647207.html

相关文章

  • 【瞎口胡】多项式操作
    前置快速傅里叶变换FFT多项式的基石操作。快速沃尔什变换FWT位运算卷积。鸽了。快速数论变换NTT把FFT搬到了模意义下,终于可以做计数问题啦。多项式牛顿......
  • 【瞎口胡】单位根反演
    单位根反演是用单位根来表示整除关系的东西。定义式\[\left[k\midn\right]=\dfrac{1}{k}\sum\limits_{i=0}^{k-1}\omega_k^{in}\]如果\(k\midn\),那么\(\omeg......
  • 【瞎口胡】Min-Max 容斥
    Min-Max容斥是通过容斥集合的最小值来得到集合最大值的一种方法。结合期望的线性性,我们得以计算几个随机变量最值的期望,它往往不和这些变量期望的最值相等。Min-Max容斥......
  • 多项式
    一、定义在数学中,若干个单项式相加组成的代数式,称为多项式。这里,相加,包括了相减,因为相减,实际是相加他的相反数。单项式,称为多项式的项。单项式的最高次数,称为多项式的......
  • 有关迭代器erase后失效的问题
    序列式容器vector,deque使用erase删除迭代器后,后面的元素的迭代器会失效。但是erase会返回下一个有效的迭代器。intmain(){        vector<int>v{1......
  • 【瞎口胡】多步容斥和二项式反演
    多步容斥多步容斥是指,对于\(n\)个集合\(A_1,A_2,\cdots,A_n\),有\[|A_1\cupA_2\cdots\cupA_n|=\sum\limits_{1\leqi\leqn}|A_i|-\sum\limits_{1\leqi<......
  • 通过迭代工具itertools.product快速得到多列表笛卡尔积(列表组合)
    1.核心代码importitertoolssubject=['我想','我要']action=['打开','关闭']target=['电视','冰箱','洗衣机']forresinitertools.product(subject,ac......
  • 0032-Rust-自实现迭代器
    环境Time2022-05-21Rust1.61.0前言说明参考:https://doc.rust-lang.org/std/iter/index.html目标接前一节,在迭代的过程中,修改每个迭代的元素。自定义类型#[der......
  • 0033-Rust-实现递归迭代
    环境Time2022-05-21Rust1.61.0前言说明参考:https://fasterthanli.me/articles/recursive-iterators-rust目标对于递归类型的结构,实现递归迭代。自定义类型str......
  • 0025-Rust-自实现迭代器
    环境Time2022-05-21Rust1.61.0前言说明参考:https://doc.rust-lang.org/std/iter/trait.IntoIterator.html目标前一节自定义了一个类型来实现迭代器,并且自定义了......