多项式中步

因为快要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}})

多项式多点求值

多项式快速插值

原文地址:https://www.cnblogs.com/oiertkj/p/12245454.html