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

    因为快要WC了所以学一下多项式全家桶,不过国赛大概率是不会考这么难的

    因为比初步难所以叫多项式中步

    然而好像并不会有多项式高步

    基础概念与前置知识

    基础概念

    只是介绍一下符号和概念

    假设(f(x))是一个多项式
    ([x^i]f(x))表示(f(x))的第i项(也就是(x)的系数为(i)的那一项)

    (f(x)mod x^n)相当于是将次数大于等于n的项移除

    多项式除法

    对于两个多项式,存在唯一的多项式(Q(x),R(x))

    [f(x)=Q(x)g(x)+R(x) ]

    [deg(Q)=deg(f)-deg(g) ]

    [deg(R)lessdot deg(g) ]

    可以类比初中的除法

    多项式求导

    前置知识求导
    我博客里曾经有过,但是它咕了

    由简单的求导公式和导数运算律
    我们可以知道对于一个多项式

    [f(x)=sumlimits_{i=0}^{n}a_ix^i ]

    [f'(x)=sumlimits_{i=0}^{n-1}(i+1)a_{i+1}x^i ]

    积分是求导的逆运算
    对于一个导数

    [f'(x)=sumlimits_{i=0}^{n}a_ix^i ]

    [f(x)=sumlimits_{i=0}^{n}frac{a_{i}}{i+1}x^{i+1} ]

    全家桶

    开个一亿的桶
    --zwj1

    多项式求逆

    只会倍增法

    (f^{-1}(x)mod x^n)

    从小往大推

    [f^{-1}(x)equiv([x^0]f(x))-1pmod {x} ]

    递归边界就是最后等于常数项的逆元

    假设已经知道了(mod x^{lceilfrac{n}{2} ceil})的逆元(g(x))
    然后递推出(mod x^{n})的逆元(h(x))(这样记只是为了不写上标)

    [f(x)g(x)equiv 1pmod{x^{lceilfrac{n}{2} ceil}} ]

    [f(x)g(x)-1equiv 0pmod{x^{lceilfrac{n}{2} ceil}} ]

    因为右边的值为0,所以此时两边平方之后会变成(pmod{x^{n}})

    [(f(x)g(x)-1)^2equiv 0pmod{x^n} ]

    [f^2(x)g^2(x)-2f(x)g(x)+1=0pmod{x^n} ]

    [1=2f(x)g(x)-f^2(x)g^2(x)pmod{x^n} ]

    两边同除(f(x))

    [h(x)=2g(x)-f(x)g^2(x)pmod{x^n} ]

    提出一个(g(x))

    [h(x)=g(x)(2-f(x)g(x))pmod{x^n} ]

    递归就完了
    虽然做了很多次NTT,但是时间复杂度是(nlog n)

    多项式除法

    咕咕咕

    多项式牛顿迭代

    (g(f(x))equiv0pmod{x^n})
    假设已经得到了(mod lceilfrac{n}{2} ceil)的答案(f_0(x))
    将这个函数在(f_0(x))处泰勒展开

    [sumlimits_{i=0}^{infin}frac{g^{(i)}(f_0(x))}{i!}(f(x)-f_0(x))^iequiv0pmod{x^n} ]

    易知
    (f(x)-f_0(x))的后(lceilfrac{n}{2} ceil)(0),所以二次及以上的系数全为(0)
    那后面就都没了

    [g(f_0(x))+g'(f_0(x))(f(x)-f_0(x))equiv0pmod{x^n} ]

    [f(x)equiv f_0(x)-frac{g(f_0(x))}{g'(f_0(x))}pmod{x^n} ]

    大概是因为这个式子长得很像牛顿迭代所以叫他多项式牛顿迭代
    具体应用见多项式(exp)和多项式开方

    多项式ln(多项式对数函数)

    (ln f(x)pmod{x^n})
    设所求为(g(x))

    [g(x)=ln f(x)pmod{x^n} ]

    对两边求导

    [g'(x)=ln'(f(x))f'(x)pmod{x^n} ]

    [已知ln'x=frac{1}{x} ]

    [g'(x)=frac{f'(x)}{f(x)}pmod{x^n} ]

    求个逆就完了
    因为多项式求逆是(O(nlogn))的,所以它也是(O(nlogn))

    多项式exp(多项式指数函数)

    用多项式牛顿迭代
    (f(x)equiv e^{a(x)}pmod{x^n})

    [ln f(x)equiv a(x)pmod{x^n} ]

    [ln f(x)-a(x)equiv 0pmod{x^n} ]

    [g(f(x))=ln f(x)-a(x) ]

    [g'(f(x))=frac{1}{f(x)} ]

    (这里把(f(x))看做参数,(a(x))看做常数)

    带入牛顿迭代的式子

    [f(x)=f_0(x)-f_0(x)(ln f_0(x)-a(x))pmod{x^n} ]

    [f(x)=f_0(x)(1-ln f_0(x)+a(x))pmod{x^n} ]

    因为多项式(ln)(O(nlogn))的,所以它还是(O(nlogn))的(迫真)

    多项式快速幂

    低级做法
    直接快速幂
    时间复杂度(O(nlog nlog k))
    先求(ln)再乘(k)再求(exp)
    时间复杂度(O(nlog n))

    好像这样可以实现(O(1))快速幂QAQ

    多项式开方

    就是对于一个(f(x)),求一个(g(x))
    使得(g^2(x)=f(x)pmod{x^n})

    倍增法

    和多项式求逆一样的颓法

    边界一样(因为板子保证了([x^0]a(x)=1)所以不用写二次剩余)

    牛顿迭代法

    [f(x)equivsqrt{a(x)}pmod{x^n} ]

    [f^2(x)equiv a(x)pmod{x^n} ]

    [f^2(x)-a(x)equiv 0pmod{x^n} ]

    [g(f(x))=f^2(x)-a(x) ]

    [g'(f(x))=2f(x) ]

    [f(x)equiv f_0(x)-frac{f_0^2(x)-a(x)}{2f_0(x)}pmod{x^n} ]

    迫真(nlog n)

    用多项式快速幂求(a(x)^{frac{1}{2}})

    多项式多点求值

    多项式快速插值

  • 相关阅读:
    站内信DB设计实现
    redis.conf配置详细解析
    MySQL中的锁(表锁、行锁)
    App开放接口api安全性—Token签名sign的设计与实现
    Linux下恢复误删除的文件
    系统资源监控工具
    MySQL性能监控工具-MONyog
    jstack Dump 日志文件中的线程状态
    数据库性能测试方案示例
    [转载]ant和maven的区别
  • 原文地址:https://www.cnblogs.com/oiertkj/p/12245454.html
Copyright © 2011-2022 走看看