zoukankan      html  css  js  c++  java
  • 多项式

    也许更好的阅读体验

    前置知识

    FFT
    牛顿迭代
    求导


    定义

    简单来说,形如(a_0x^0+a_1x^1+a_2x^2+cdots+a_nx^n),的代数表达式叫做多项式
    可以记作(f(x)=a_0x^0+a_1x^1+a_2x^2+ cdots+a_nx^n)
    其中(a_0,a_1,cdots,a_n)叫做多项式的系数,(x)是一个不定元,不表示任何值
    不定元在多项式中最大项的次数称作多项式的次数


    多项式的表示法

    系数表示法

    像刚刚我们提到的那些多项式,都是以系数形式表示的,也就是将(n)次多项式(f(x))的系数(a_0,a_1,cdots,a_n)看作(n+1)维向量(overrightarrow{a}=(a_0,a_1,cdots,a_n)),其系数表示就是向量(overrightarrow{a})

    点值表示法

    如果(n+1)个不同的数(x_0,x_1,cdots,x_n)对多项式进行求值,得到(f(x_0),f(x_1),cdots,f(x_n)),那么就称(left{ left( x_{i},fleft( x_{i} ight) ight)|0leq ileq n,iin Z ight})为多项式(f(x))的点值表示
    注意,(n+1)个点值只能表示(n)次多项式


    多项式的基本运算

    两个多项式(egin{aligned}f(x)=sum_{i=0}^{infty}a_ix^iend{aligned})(egin{aligned}g(x)=sum_{i=0}^{infty}b_ix^iend{aligned})

    加法

    (egin{aligned}h(x)=f(x)+g(x)=sum_{i=0}^{infty}(a_i+b_i)x^iend{aligned})

    乘法

    (egin{aligned}f(x)=f(x)*g(x)=sum_{i=0}^{infty}sum_{j+k=i} (a_jcdot b_k)x^iend{aligned})


    多项式的其它运算

    基本套路

    从现在开始要用到牛顿迭代了
    一般基本套路是运用牛顿迭代倍增求解

    1. 先构造一个复合多项式(g),使(g(f)=0)
    2. (g)求导
    3. 牛顿迭代

    为了方便阅读,下面把牛顿迭代再贴一次

    (fequiv f_{0}-dfrac {gleft( f_{0} ight) }{g'left( f_{0} ight) }left( mod x^{2n} ight))

    有一个多项式(A)

    多项式求逆

    (f=dfrac{1}{A}),求(f)的前(n)

    构造(gleft( f ight) =dfrac {1}{f}-A=0),我们知道(f)的常数项为(A)的常数项的逆元,接下来开始迭代
    此时有 (g'(f_0)=-dfrac{1}{f_0^2})

    (g'(f_0)=(f_0^{-1}-A)'),将(A)看为常数项
    (g'(f_0)=(f_0^{-1}-A)'=-f^{-2}_0=-dfrac{1}{f_0^2})

    根据牛顿迭代
    (fequiv f_0-dfrac{dfrac{1}{f_0}-A}{-dfrac{1}{f_0^2}}left( mod x^{2n} ight)equiv2f_0-Af_0^2left( mod x^{2n} ight))
    至此,我们推完了,拿出来,写在下面

    (fequiv2f_0-Af_0^2left( mod x^{2n} ight))

    现在我们可以由(f_0)去推(f),每次这个模数(x^y)(y)会乘以2,也就是说是倍增的
    初始时(n=1)
    时间复杂度(O(nlogn))

    多项式求ln

    (f=ln g)的前(n)
    我们对其求导
    (f'left( x ight) =dfrac {g'(x)}{gleft( x ight) })

    复合求导
    ln -> u
    g -> v

    这样,我们只要对(g)求逆,然后对(g)求导得(g'),之后我们就得到了(f'),再对其积分得到(f)
    求导和积分都是(O(n))
    时间复杂度(O(nlogn))

    多项式exp

    (f=e^A) ((A)的常数项为(0))的前(n)

    构造(g(f)=ln f-A)
    我们知道(f)的常数项为(1)
    (g)求导,(g'(f_0)=dfrac{1}{f_0})
    根据牛顿迭代
    (egin{aligned}f&equiv f-dfrac {lnf_{0}-A}{dfrac {1}{f_{0}}}left( mod x^{2n} ight)\ &equiv f_{0}left( 1-ln f_{0}+A ight) left( mod x^{2n} ight) end{aligned})

    至此,我们推完了,拿出来,写在下面

    (fequiv f_{0}left( 1-ln f_{0}+A ight) left( mod x^{2n} ight))

    还是倍增
    (ln)和多项式乘法都是(O(nlogn))的,加法是(O(n))
    时间复杂度(O(nlogn))

    多项式开方

    (f=sqrt {A}) ((A)的常数项存在平方根)的前(n)

    构造(g(f)=f^2-A)
    我们知道(f)的常数项为(A)常数项的平方根
    可用二次剩余方法解
    (g)求导(g'(f_0)=2f_0)
    根据牛顿迭代
    (fequiv f_{0}-dfrac {f^{2}_{0}-A}{2f_{0}}left( mod x^{2n} ight))
    时间复杂度(O(nlogn))

    如有哪里讲得不是很明白或是有错误,欢迎指正
    如您喜欢的话不妨点个赞收藏一下吧
    如能得到推荐博主就更开心了
    您的鼓励是博主的动力

  • 相关阅读:
    Huawei vlan 配置及vlan 间通讯
    Huawei DHCP 中继配置实例
    Huawei DHCP 全局配置与接口配置
    Cisco DHCP 配置方法
    VS Code的golang开发配置 之 代码提示
    天气服务API文档 第1版
    Android 让图片等比例缩放的三种方法
    Jar mismatch! Fix your dependencies
    android ActionBarSherlock使用说明
    Only the original thread that created a view hierarchy can touch its views.
  • 原文地址:https://www.cnblogs.com/Morning-Glory/p/11317760.html
Copyright © 2011-2022 走看看