几个结论

· · 个人记录

今晚问贺知临一些问题,终于搞懂了一些之前不知道的芝士。

就假设$f'(x)$表示对$f(x)$求导$... f(x)=x^2 f'(x)=2x

然后有一个结论:

求导和做积分是互逆的计算

比如f求导是g

那么g做积分是f

比如

f(x)=x^2->f'(x)=2x f(x)=2x->g(x)=x^2

貌似有一个结论:

f(x)=x^a->f(x)=a*x^{a-1}

然后积分因为是面积所以可以逐项加起来

于是对多项式求积分就只需要对每一项求积分然后加起来即可

e.g:

然后还有一个结论(反向):

f(x)=x^k->g(x)=\dfrac{1}{k+1}*x^{k+1}

于是就可以逐项加起来

然后还有一个结论是系数可以直接乘上去

这个东西的理由也一样,乘法看作多次加法,积分是可加的...

于是:

k*x^a=\dfrac{k}{a+1}x^{a+1}

也有:

k*x^a=k*ax^{a-1}

然后求导运算有一些规律:

e.g: 1.(f(x)*g(x))'=f'(x)*g(x)+f(x)*g'(x)

证明:

(f*g)'(x)=\dfrac{(f*g)(x+dx)-(f*g)(x)}{dx} \dfrac{(f*g)(x+dx)-f(x+dx)g(x)+f(x+dx)g(x)-(f*g)(x)}{dx} \dfrac{f(x+dx)(g(x+dx)-g(x))+g(x)*(f(x+dx)-f(x))}{dx}

于是就有:

因为\lim_{dx\to 0}f(x+dx)=f(x)

所以就有:

原式=

f(x)*g'(x)+g(x)*f'(x)

于是:

(f*g)(x)=f(x)*g'(x)+g(x)*f'(x) 2.f(g(x))'=f'(g(x))*g'(x)

证明:

f(g(x))'=\dfrac{f(g(x+dx))-f(g(x))}{dx}

可以构造dg=\dfrac{}{dx}

(\dfrac{f(x)}{g(x)})'=\dfrac{f'(x)g(x)-g'(x)f(x)}{g(x)^2}

然后结论:

ln'(x)=\dfrac{1}{x}

然后接下来推一下多项式\rm ln

B(x)=ln(A(x))

两边同时求导得:

u=A(x)

B'(x)=ln'(u)*A'(x)

ln'(u)=\dfrac{1}{u}

所以得:

B'(x)=\dfrac{A'(x)}{A(x)}

所以就只需要计算出A'(x)即可

因为求导与积分互逆,所以求导可加=积分可加,个人感觉

首先有对一个数求导是0

所以我们知道

A'(x)=\sum_{i=1}^na_i*ix^{i-1}

然后在求一下A(x)的逆A^{-1}(x)

然后将A'(x)A^{-1}(x)乘起来就好了qwq

然后还原回去就套用上面的公式

顺便回忆一下多项式求逆吧...(雾

A'(x),A(x),B(x) A'(x)*A(x)=1(mod~x^n) B(x)*A(x)=1(mod~x^{n/2})

于是:

(A'(x)-B(x))*A(x)=0(mod~x^{n/2})

显然是因为左边变成了0

所以:

A'(x)-B(x)=0(mod ~x^{n/2}) (A'(x)-B(x))^2=0(mod~x^n) A'(x)^2+B(x)^2-2A'(x)B(x)=0(mod~~x^n)

同时乘A得:

A'(x)+B(x)^2*A(x)-2B(x)=0(mod~x^n)

于是:

A'(x)=2B-B^2*A

递归处理即可

复杂度为T(x)=x\log x+T(x/2)

O(n\log n)

好乱...以后补充到多项式全家桶里面去了qwq

2.$多项式$\rm exp

泰勒展开

首先是一个函数的泰勒展开:

F(x)=f(x_0)+\sum_{i=1}^{\infty}\dfrac{f^{i}(x_0)(x-x_0)^i}{i!}

其中f^i表示i阶导数

然而在精度允许的条件下由于阶乘非常的大所以只需要把n开到12,13左右即可

然后由于我们可以随便选择一个x_0进行泰勒展开,所以一般选择0

于是我们就可以将原式转化为

F(x)=f(0)+\sum_{i=1}^{\infty}\dfrac{f^i(0)*x^i}{i!}

牛顿迭代

用于求解0

与二分不同的是牛顿迭代的求法是对一个函数求导,降次,求解降次后的0点以逼近原函数的0

多项式牛顿迭代即求解满足G(F(x))=0(mod~~x^n)的解F(x)

n=1$的时候满足条件的多项式可以直接求出来,这个时候只有常数项,令常数项$=0

假设现在已经求出了:

G(F_0(x))=0(mod ~~x^{n/2})

考虑拓展到x^n次意义下,可以在G(F_0(x))处将G(F(x))泰勒展开变成:

G(F(x))=G(F_0(x))+\sum_{i=1}^n\dfrac{G^{i}(F_0(x))*(F(x)-F_0(x))^i}{i!}

因为我们有:G(F(x))=0(mod~~x^n)

所以就有:

G(F(x))=G(F_0(x))+\sum_{i=1}^n\dfrac{G^{i}(F_0(x))*(F(x)-F_0(x))^i}{i!}=0(mod~~x^n)

G(F_0(x))=0(mod~~x^{n/2})

然后又由于理论上应该有:F(x)F_0(x)n/2项应该相等

所以那个奇怪的减法会导致这个函数没有最后n/2

于是就发生了神奇的结论!

F(x)-F_0(x)

没有最后n/2

所以(F(x)-F_0(x))^2没有最后n-1

于是令人惊喜的是我们泰勒展开的第二项就是(F(x)-F_0(x))^2

所以我们居然只需要展开两项即可!!!woc

所以就得到了神奇的结论:

G(F(x))=G(F_0(x))+G'(F_0(x))*(F(x)-F_0(x))=0(mod~~x^n)

于是就有:

F(x)=F_0(x)-\dfrac{G(F_0(x))}{G'(F_0(x))}(mod~~x^n)

于是就可以倍增处理了...

问题的关键主要是对G'(F_0(x))求导才对吧...

下面给出两个对于G'(F_0(x))求导的例子:

多项式\exp

现在想要求解:

B(x)=e^{A(x)}

于是两边同时取\ln得:

\ln B(x)-A(x)=0

可以设G(B(x))=\ln B(x)-A(x)于是问题变成求解它的0

这个多项式里面A(x)为定值,而B(x)为变量

我们假设有:

G(H(x))=0(mod~~x^{n/2})

问题是求解B(x)

于是代入牛顿迭代的公式得到:

B(x)=H(x)-\dfrac{G(H(x))}{G'(H(x))}

因为G'(H(x))=\ln H(x)-A(x)

而其中A(x)为常量,由于求导的可加性,A'(x)=0,简单求和可以得到:

G'(H(x))=\dfrac{1}{H(x)}

所以我们可以得到:

B(x)=H(x)-(\ln H(x)-A(x))*H(x) B(x)=H(x)(1-\ln H(x)+A(x))

然而因为求解\ln H(x)的复杂度是O(n\log n)

于是求解\exp的复杂度也是T(x)=x\log x+T(x/2)

O(n\log n)

不过常数比较大就是了......

多项式开根

与上面类似

假设有

B(x)=\sqrt {A(x)}\quad (mod~~x^n)

两边同时平方得到:

B^2(x)-A(x)=0\quad (mod~~x^n)

可以设一个函数G(B(x))=B^2(x)-A(x)

代入牛顿迭代的式子就是:

B(x)=H(x)-\dfrac{G(H(x))}{G'(H(x))}

然后类似的,将A(x)看作常量,那么可以得到:G'(B(x))=2B(x)

所以得到:

B(x)=H(x)-\dfrac{H(x)^2-A(x)}{2H(x)} B(x)=\dfrac{1}{2}H(x)+\dfrac{A(x)}{2H(x)}

于是要求逆,复杂度O(n\log n)

常数也比较大qwq