[学习笔记]多项式相关运算2(求导/积分,牛顿迭代,开根,求ln/exp,快速幂,拉格朗日反演)

一年之后好不容易又有机会学多项式,接着[学习笔记]多项式相关运算1继续说。
常数巨大警告…

多项式求导&积分

计算

没学过导数积分的可以看看这篇文章
嗯?里面没有不定积分…所以你可以直接看下面的两个式子:
F ′ ( x ) = ∑ i = 1 n i a i x i − 1 F'(x)=\sum^{n}_{i=1}ia_ix^{i-1} F(x)=i=1niaixi1
∫ F ( x ) = ∑ i = 1 n a i x i + 1 i + 1 \int F(x)=\sum^{n}_{i=1}\frac{a_ix^{i+1}}{i+1} F(x)=i=1ni+1aixi+1
容易发现它们是互逆运算。
直接算就行了。
复杂度: O ( n ) O(n) O(n)

模板

	void ploy_der(int len,int *a,int *b){
        for(int i=1;i<len;i++)b[i-1]=mul(i,a[i]);
        b[len-1]=0;
    }
	void ploy_cal(int len,int *a,int *b){
        for(int i=1;i<len;i++)b[i]=mul(a[i-1],fst_pow(i,MOD-2));
        b[0]=0;
   }

牛顿迭代

简介

牛顿迭代并不算一种多项式运算,而是一种解多项式的方法。
使用这种方法可以很容易计算多项式开根及exp等。
在学习牛顿迭代之前,你可能还要学习:
[学习笔记]泰勒多项式快速入门

问题描述

已知函数 G ( x ) G(x) G(x),求一个多项式 F ( x )   m o d    x n F(x)\bmod \: x^n F(x)modxn,满足:
G ( F ( x ) ) ≡ 0 (   m o d    x n ) G(F(x))\equiv 0(\bmod \: x^n) G(F(x))0(modxn)

分治

其实求   m o d   x n \bmod x^n modxn大多都是分治法。
n = 1 n=1 n=1是, G ( F ( x ) ) ≡ 0 (   m o d    x ) G(F(x))\equiv 0(\bmod \: x) G(F(x))0(modx)这需要单独求。
n > 1 n>1 n>1按照套路,假设 G ( F 0 ( x ) ) ≡ 0 (   m o d    x ⌈ n 2 ⌉ ) G(F_0(x))\equiv 0(\bmod \: x^{\lceil \frac{n}{2}\rceil}) G(F0(x))0(modx2n) F 0 ( x ) F_0(x) F0(x)已经解出。
注意到泰勒展开可以将 G ( F ( x ) ) G(F(x)) G(F(x))中的 F ( x ) F(x) F(x)换掉,我们考虑在 F 0 ( x ) F_0(x) F0(x)处泰勒展开 G ( F ( x ) ) G(F(x)) G(F(x)):
G ( F ( x ) ) = G ( F 0 ( x ) ) + G ′ ( F 0 ( x ) ) 1 ! ( F ( x ) − F 0 ( x ) ) + G ′ ′ ( F 0 ( x ) ) 2 ! ( F ( x ) − F 0 ( x ) ) 2 + . . . G(F(x))=G(F_0(x))+\frac{G'(F_0(x))}{1!}(F(x)-F_0(x))+\frac{G''(F_0(x))}{2!}(F(x)-F_0(x))^2+... G(F(x))=G(F0(x))+1!G(F0(x))(F(x)F0(x))+2!G(F0(x))(F(x)F0(x))2+...
根据约定我们知道 F ( x ) − F 0 ( x ) F(x)-F_0(x) F(x)F0(x)的后 ⌈ n 2 ⌉ \lceil \frac{n}{2}\rceil 2n项等于 0 0 0,而在 ( F ( x ) − F 0 ( x ) ) 2 (F(x)-F_0(x))^2 (F(x)F0(x))2时显然 0 − ( n − 1 ) 0-(n-1) 0(n1)项都为 0 0 0,在模意义下可以直接去掉。
因此有 G ( F ( x ) ) ≡ G ( F 0 ( x ) ) + G ′ ( F 0 ( x ) ) 1 ! ( F ( x ) − F 0 ( x ) ) (   m o d    x n ) G(F(x))\equiv G(F_0(x))+\frac{G'(F_0(x))}{1!}(F(x)-F_0(x))(\bmod \: x^n) G(F(x))G(F0(x))+1!G(F0(x))(F(x)F0(x))(modxn)
由于定义又有 G ( F ( x ) ) ≡ 0 (   m o d    x n ) G(F(x))\equiv 0(\bmod \: x^n) G(F(x))0(modxn)
于是得到 F ( x ) = F 0 ( x ) − G ( F 0 ( x ) ) G ′ ( F 0 ( x ) ) (   m o d    x n ) F(x)=F_0(x)-\frac{G(F_0(x))}{G'(F_0(x))}(\bmod \: x^n) F(x)=F0(x)G(F0(x))G(F0(x))(modxn)
有了这东西我们其实就可以直接用公式了。

多项式开根

问题描述

给定一个多项式 A ( x ) A(x) A(x)
找到另一个多项式 B ( x ) B(x) B(x)
使得 B 2 ( x ) ≡ A ( x ) ( m o d B^2(x)≡A(x)(mod B2(x)A(x)(mod x n ) x^n) xn)
则称 B ( x ) B(x) B(x) A ( x ) A(x) A(x) m o d mod mod x n x^n xn意义下的平方根。
保证 a 0 = 1 a_0=1 a0=1
[如果没有这个条件,我们可能还需要一个二次剩余才能够解决]

分治

我们再次考虑使用分治来解决这个问题。
n = 1 n=1 n=1时,根据题目的常数项就为 1 1 1
n > 1 n>1 n>1
首先知道 B 2 ( x ) ≡ A ( x ) ( m o d B^2(x)≡A(x)(mod B2(x)A(x)(mod x n ) x^n) xn)
B ′ ( x ) B'(x) B(x) A ( x ) A(x) A(x) m o d mod mod x ⌈ n 2 ⌉ x^{\lceil \frac{n}{2} \rceil} x2n的平方根,假设我们现在已经知道 B ′ ( x ) B'(x) B(x),则:
B ′ 2 ( x ) ≡ A ( x ) ( m o d B'^2(x)≡A(x)(mod B2(x)A(x)(mod x ⌈ n 2 ⌉ ) x^{\lceil \frac{n}{2} \rceil}) x2n)
移项 B ′ 2 ( x ) − A ( x ) ≡ 0 ( m o d B'^2(x)-A(x)≡0(mod B2(x)A(x)0(mod x ⌈ n 2 ⌉ ) x^{\lceil \frac{n}{2} \rceil}) x2n)
两边同时平方 B ′ 4 ( x ) − 2 B ′ 2 ( x ) A ( x ) + A 2 ( x ) ≡ 0 ( m o d B'^4(x)-2B'^2(x)A(x)+A^2(x)≡0(mod B4(x)2B2(x)A(x)+A2(x)0(mod x n ) x^n) xn)
前文已经说明为什么平方可以将膜长平方,这里不做赘述。
两边同时加上 4 B ′ 2 ( x ) A ( x ) 4B'^2(x)A(x) 4B2(x)A(x)
B ′ 4 ( x ) + 2 B ′ 2 ( x ) A ( x ) + A 2 ( x ) ≡ 4 B ′ 2 ( x ) A ( x ) ( m o d B'^4(x)+2B'^2(x)A(x)+A^2(x)≡4B'^2(x)A(x)(mod B4(x)+2B2(x)A(x)+A2(x)4B2(x)A(x)(mod x n ) x^n) xn)
配方 ( B ′ 2 ( x ) + A ( x ) ) 2 ≡ 4 B ′ 2 ( x ) A ( x ) ( m o d (B'^2(x)+A(x))^2≡4B'^2(x)A(x)(mod (B2(x)+A(x))24B2(x)A(x)(mod x n ) x^n) xn)
移项 ( B ′ 2 ( x ) + A ( x ) 2 B ′ ( x ) ) 2 ≡ A ( x ) ( m o d (\frac{B'^2(x)+A(x)}{2B'(x)})^2≡A(x)(mod (2B(x)B2(x)+A(x))2A(x)(mod x n ) x^n) xn)
对比式子 B 2 ( x ) ≡ A ( x ) ( m o d B^2(x)≡A(x)(mod B2(x)A(x)(mod x n ) x^n) xn)
可以发现 B ( x ) ≡ B ′ 2 ( x ) + A ( x ) 2 B ′ ( x ) ( m o d B(x)≡\frac{B'^2(x)+A(x)}{2B'(x)}(mod B(x)2B(x)B2(x)+A(x)(mod x n ) x^n) xn)
那么我们直接求 ( 2 B ′ ( x ) ) − 1 ( B ′ 2 ( x ) + A ( x ) ) (2B'(x))^{-1}(B'^2(x)+A(x)) (2B(x))1(B2(x)+A(x))即可。
需要用到一个逆元和几个乘法。

分析一下复杂度:
T ( n ) = T ( n 2 ) + O ( n l o g n ) = O ( n l o g n ) T(n)=T(\frac{n}{2})+O(nlogn)=O(nlogn) T(n)=T(2n)+O(nlogn)=O(nlogn)

牛顿迭代

我们直接套公式就好了
首先我们构造函数 G ( B ( x ) ) = B 2 ( x ) − A ( x ) G(B(x))=B^2(x)-A(x) G(B(x))=B2(x)A(x)
再求 G ′ ( B ( x ) ) = 2 B ( x ) G'(B(x))=2B(x) G(B(x))=2B(x)[把 A ( x ) A(x) A(x)看成常数项]。
代入公式:
B ( x ) = B 0 ( x ) − G ( B 0 ( x ) ) G ′ ( B 0 ( x ) ) B ( x ) = B 0 2 ( x ) + A ( x ) 2 B 0 ( x ) (   m o d    x n ) B(x)=B_0(x)-\frac{G(B_0(x))}{G'(B_0(x))}\\ B(x)=\frac{B_0^2(x)+A(x)}{2B_0(x)}(\bmod \: x^n) B(x)=B0(x)G(B0(x))G(B0(x))B(x)=2B0(x)B02(x)+A(x)(modxn)

你会发现我们得到的结果是一样的…

模板

	void ploy_sqr(int n,int *a,int *b){
	    static int c[MAXN+5],F[MAXN+5];
	    if(n==1){b[0]=1;return ;}
	    ploy_sqr((n+1)>>1,a,b);
	    fill(F,F+(n<<1),0),ploy_inv(n,b,F);
	    int len=1;while(len<(n<<1))len<<=1;
   		copy(a,a+n,c);
    	fill(c+n,c+len,0),NTT(c,len,1);
    	fill(F+n,F+len,0),NTT(F,len,1);
    	for(int i=0;i<len;i++)c[i]=mul(mul(c[i],inv2),F[i]);
    	NTT(c,len,-1);
    	for(int i=0;i<n;i++)
    	b[i]=add(mul(b[i],inv2),c[i]);
	}

多项式ln

问题描述

给出 n − 1 n-1 n1 次多项式 A ( x ) A(x) A(x),求一个   m o d     x n \bmod{\:x^n} modxn下的多项式 B ( x ) B(x) B(x),满足 B ( x ) ≡ ln ⁡ A ( x ) B(x) \equiv \ln A(x) B(x)lnA(x).
mod  998244353 \text{mod } 998244353 mod 998244353 下进行,且 a i ∈ [ 0 , 998244353 ] ∩ Z a_i \in [0, 998244353] \cap \mathbb{Z} ai[0,998244353]Z
n ≤ 1 0 5 n\leq 10^5 n105
保证 a 0 = 1 a_0=1 a0=1

求导

思路很简单…
为了书写方便我们令 f ( x ) = ln ⁡ x f(x)=\ln x f(x)=lnx
那么原式就为 B ( x ) ≡ f ( A ( x ) ) (   m o d     x n ) B(x)\equiv f(A(x))(\bmod{\:x^n}) B(x)f(A(x))(modxn)
ln ⁡ x \ln x lnx有一个很重要的性质就是它的导数为 1 x \frac{1}{x} x1,这样我们就把 ln ⁡ \ln ln去掉了。
因此对原式求导[用到了复合函数求导,上一部分有]:
B ′ ( x ) ≡ f ′ ( A ( x ) ) A ′ ( x ) (   m o d     x n ) B ′ ( x ) ≡ A ′ ( x ) A ( x ) (   m o d     x n ) B ( x ) ≡ ∫ A ′ ( x ) A ( x ) (   m o d     x n ) B'(x)\equiv f'(A(x))A'(x)(\bmod{\:x^n})\\ B'(x)\equiv \frac{A'(x)}{A(x)}(\bmod{\:x^n})\\ B(x)\equiv \int \frac{A'(x)}{A(x)}(\bmod{\:x^n})\\ B(x)f(A(x))A(x)(modxn)B(x)A(x)A(x)(modxn)B(x)A(x)A(x)(modxn)
于是多项式导数&积分+多项式求逆就好了。
细节:

其实我们求导+积分是会把常数项给去掉的,所以这题钦定了常数项为 a 0 = 1 a_0=1 a0=1,这时候 ln ⁡ ( 1 ) = 0 \ln(1)=0 ln(1)=0,所以我们直接在积分结束后将常数项设为 0 0 0即可。

复杂度: O ( n log ⁡ n ) O(n\log n) O(nlogn)

模板

	void ploy_ln(int n,int *a,int *b){
 	   	static int A[MAXN+5],B[MAXN+5];
 	   	fill(A,A+(n<<1),0),fill(B,B+(n<<1),0);
 	   	ploy_der(n,a,A),ploy_inv(n,a,B);
 	   	int len=1;while(len<(n<<1))len<<=1;
  	  	NTT(A,len,1),NTT(B,len,1);
  	  	for(int i=0;i<len;i++)A[i]=mul(A[i],B[i]);
    	NTT(A,len,-1),ploy_cal(n,A,b);
	}

多项式exp

问题描述

给出 n − 1 n−1 n1 次多项式 A ( x ) A(x) A(x),求一个   m o d     x n \bmod{\:x^n} modxn下的多项式 B ( x ) B(x) B(x),满足 B ( x ) ≡ e A ( x ) B(x) \equiv \text e^{A(x)} B(x)eA(x)。系数对 998244353 998244353 998244353 取模。
保证 a 0 = 0 a_0=0 a0=0[跟上面一样的道理]

牛顿迭代

转化一下式子:
ln ⁡ B ( x ) − A ( x ) ≡ 0 (   m o d     x n ) \ln B(x) -A(x)\equiv 0(\bmod{\:x^n}) lnB(x)A(x)0(modxn)
同样地,构造函数 G ( B ( x ) ) = ln ⁡ B ( x ) − A ( x ) G(B(x))=\ln B(x) -A(x) G(B(x))=lnB(x)A(x)
G ′ ( B ( x ) ) = 1 B ( x ) G'(B(x))=\frac{1}{B(x)} G(B(x))=B(x)1
B ( x ) = B 0 ( x ) − G ( B 0 ( x ) ) G ′ ( B 0 ( x ) ) B ( x ) = B 0 ( x ) ( 1 − ln ⁡ B 0 ( x ) + A ( x ) ) (   m o d    x n ) B(x)=B_0(x)-\frac{G(B_0(x))}{G'(B_0(x))}\\ B(x)=B_0(x)(1-\ln B_0(x)+A(x))(\bmod \: x^n) B(x)=B0(x)G(B0(x))G(B0(x))B(x)=B0(x)(1lnB0(x)+A(x))(modxn)
然后就没了,需要用到多项式ln和。
复杂度同样是 T ( n ) = T ( n 2 ) + O ( n l o g n ) = O ( n l o g n ) T(n)=T(\frac{n}{2})+O(nlogn)=O(nlogn) T(n)=T(2n)+O(nlogn)=O(nlogn)

模板

	void ploy_exp(int n,int *a,int *b){
    	static int F[MAXN+5];
    	if(n==1){b[0]=1;return ;}
    	ploy_exp((n+1)>>1,a,b);
    	fill(F,F+(n<<1),0),ploy_ln(n,b,F);
    	for(int i=0;i<n;i++)F[i]=dec(a[i],F[i]);
    	F[0]=add(F[0],1);
    	int len=1;while(len<(n<<1))len<<=1;
    	fill(b+n,b+len,0),NTT(b,len,1);
    	fill(F+n,F+len,0),NTT(F,len,1);
    	for(int i=0;i<len;i++)b[i]=mul(b[i],F[i]);
    	NTT(b,len,-1),fill(b+n,b+len,0);
	}

多项式快速幂

问题描述

给定一个 n − 1 n-1 n1 次多项式 A ( x ) A(x) A(x),求一个在   m o d     x n \bmod\ x^n mod xn意义下的多项式 B ( x ) B(x) B(x),使得 B ( x ) ≡ A k ( x )   (   m o d     x n ) B(x)\equiv A^k(x) \ (\bmod\ x^n) B(x)Ak(x) (mod xn)
多项式的系数在   m o d     998244353 \bmod\ 998244353 mod 998244353的意义下进行运算。

计算

很简单,我们之前学了求ln,exp,所以直接换底就行了。
G ( x ) = F k ( x ) ln ⁡ G ( x ) = k ln ⁡ F ( x ) G ( x ) = e k ln ⁡ F ( x ) G(x)=F^k(x)\\ \ln G(x)=k\ln F(x)\\ G(x)=e^{k\ln F(x)} G(x)=Fk(x)lnG(x)=klnF(x)G(x)=eklnF(x)
复杂度: O ( n log ⁡ n ) O(n\log n) O(nlogn)

模板

	void ploy_ksm(int n,int k,int *a,int *b){
        static int C[MAXN+5];
        ploy_ln(n,a,C);
        for(int i=0;i<n;i++)C[i]=mul(C[i],k);
        ploy_exp(n,C,b);
    }

拉格朗日反演

简介

若两个多项式 f ( x ) , g ( x ) f(x),g(x) f(x),g(x),满足都没有常数项且一次项系数互为逆元,且 f ( g ( x ) ) = x f(g(x))=x f(g(x))=x,那么称 f ( x ) f(x) f(x) g ( x ) g(x) g(x)的复合逆。
根据反演这个名字我们也知道 f ( g ( x ) ) f(g(x)) f(g(x))会等于 g ( f ( x ) ) g(f(x)) g(f(x))
然后就有结论:

[ x n ] f ( x ) = 1 n [ x n − 1 ] ( x g ( x ) ) n [x^n]f(x)=\frac{1}{n}[x^{n-1}](\frac{x}{g(x)})^n [xn]f(x)=n1[xn1](g(x)x)n
还有一个叫扩展拉格朗日反演的东西:
[ x n ] H ( F ( x ) ) = 1 n [ x n − 1 ] H ′ ( x ) ( x G ( x ) ) n [x^n]H(F(x))=\frac{1}{n}[x^{n-1}]H'(x)(\frac{x}{G(x)})^n [xn]H(F(x))=n1[xn1]H(x)(G(x)x)n
PS: [ x n ] f ( x ) [x^n]f(x) [xn]f(x)表示 f ( x ) f(x) f(x) n n n项的系数。

证明???很多知识都没学过…就算了吧…
细节:

注意到根据定义 g ( x ) g(x) g(x)是没有常数项的,因此没有 g ( x ) g(x) g(x)的逆元,所以我们一般在做拉格朗日反演之前对多项式向右平移一位再求逆。

复杂度: O ( n log ⁡ n ) O(n\log n) O(nlogn)

模板

	int ploy_Lagrange(int n,int k,int *a){
        static int C[MAXN+5],D[MAXN+5];
        ploy_inv(n,a,C);
        ploy_ksm(n,k,C,D);
        return mul(D[k-1],pinv[k]);
    }

简单总结-多项式全家桶

名称公式解决方法复杂度
多项式乘法 F ( x ) = A ( x ) B ( x ) F(x)=A(x)B(x) F(x)=A(x)B(x)NTT/FFT O ( n log ⁡ n ) O(n\log n) O(nlogn)
多项式求逆 B ( x ) ≡ 2 B 1 ( x ) − B 1 2 ( x ) A ( x ) ( m o d    x n ) B(x)\equiv2B_1(x)-B_1^2(x)A(x)(\mod x^n) B(x)2B1(x)B12(x)A(x)(modxn)分治+多项式乘法 O ( n log ⁡ n ) O(n\log n) O(nlogn)
多项式除法 A R ( x ) B R − 1 ( x ) ≡ D R ( x ) ( m o d    x n − m + 1 ) A^R(x)B^{R^{-1}}(x)≡D^R(x)(\mod x^{n-m+1}) AR(x)BR1(x)DR(x)(modxnm+1)多项式求逆 O ( n log ⁡ n ) O(n\log n) O(nlogn)
多项式取模 P ( x ) = A ( x ) − D ( x ) B ( x ) P(x)=A(x)-D(x)B(x) P(x)=A(x)D(x)B(x)多项式乘法 O ( n log ⁡ n ) O(n\log n) O(nlogn)
多项式求导 F ′ ( x ) = ∑ i = 1 n i a i x i − 1 F'(x)=\sum^{n}_{i=1}ia_ix^{i-1} F(x)=i=1niaixi1直接算—— O ( n ) O(n) O(n)
多项式积分 ∫ F ( x ) = ∑ i = 1 n a i x i + 1 i + 1 \int F(x)=\sum^{n}_{i=1}\frac{a_ix^{i+1}}{i+1} F(x)=i=1ni+1aixi+1直接算—— O ( n ) O(n) O(n)
多项式开根 B ( x ) ≡ B 1 2 ( x ) + A ( x ) 2 B 1 ( x ) ( m o d    x n ) B(x)≡\frac{B_1^2(x)+A(x)}{2B_1(x)}(\mod x^n) B(x)2B1(x)B12(x)+A(x)(modxn)分治+多项式求逆 O ( n log ⁡ n ) O(n\log n) O(nlogn)
多项式ln l n ( F ( x ) ) = ∫ F ′ ( x ) F − 1 ( x ) ln(F(x))=\int F'(x)F^{-1}(x) ln(F(x))=F(x)F1(x)多项式求逆 O ( n log ⁡ n ) O(n\log n) O(nlogn)
多项式exp F ( x ) ≡ F 0 ( x ) ( 1 − ln ⁡ F 0 ( x ) + A ( x ) ) ( m o d    x n ) F(x)\equiv F_0(x)(1-\ln F_0(x)+A(x))(\mod x^n) F(x)F0(x)(1lnF0(x)+A(x))(modxn)多项式ln O ( n log ⁡ n ) O(n\log n) O(nlogn)

多项式多点求值

分成点集 X [ 0 ] = { x 0 , x 1 , x 2 , . . . , x ⌊ n 2 ⌋ } X^{[0]}=\{x_0,x_1,x_2,...,x_{\lfloor \frac{n}{2} \rfloor}\} X[0]={x0,x1,x2,...,x2n}
X [ 1 ] = { x ⌊ n 2 ⌋ + 1 , x ⌊ n 2 ⌋ + 2 , x ⌊ n 2 ⌋ + 3 , . . . , x n − 1 } X^{[1]}=\{x_{\lfloor \frac{n}{2} \rfloor+1},x_{\lfloor \frac{n}{2} \rfloor+2},x_{\lfloor \frac{n}{2} \rfloor+3},...,x_{n-1}\} X[1]={x2n+1,x2n+2,x2n+3,...,xn1}
构造多项式: P [ 0 ] ( x ) = ∏ i = 0 ⌊ n 2 ⌋ ( x − x i ) P^{[0]}(x)=\prod^{\lfloor \frac{n}{2} \rfloor}_{i=0}{(x-x_i)} P[0](x)=i=02n(xxi) P [ 1 ] ( x ) = ∏ i = ⌊ n 2 ⌋ + 1 n ( x − x i ) P^{[1]}(x)=\prod^{n}_{i=\lfloor \frac{n}{2} \rfloor+1}{(x-x_i)} P[1](x)=i=2n+1n(xxi)
A [ 0 ] ( x ) ≡ A ( x ) (   m o d   P [ 0 ] ( x ) ) A^{[0]}(x)≡A(x)(\bmod P^{[0]}(x)) A[0](x)A(x)(modP[0](x)) A [ 1 ] ( x ) ≡ A ( x ) (   m o d   P [ 1 ] ( x ) ) A^{[1]}(x)≡A(x)(\bmod P^{[1]}(x)) A[1](x)A(x)(modP[1](x))
分治即可(打不打得出来我也不知道了qwq…)
复杂度: O ( n log ⁡ 2 n ) O(n\log^2 n) O(nlog2n)

多项式快速插值

分成点集 X [ 0 ] = { ( x 0 , y 0 ) , ( x 1 , y 1 ) , . . . , ( x ⌊ n 2 ⌋ , y ⌊ n 2 ⌋ ) } X^{[0]}=\{(x_0,y_0),(x_1,y_1),...,(x_{\lfloor \frac{n}{2} \rfloor},y_{\lfloor \frac{n}{2} \rfloor})\} X[0]={(x0,y0),(x1,y1),...,(x2n,y2n)}
X [ 1 ] = { ( x ⌊ n 2 ⌋ + 1 , y ⌊ n 2 ⌋ + 1 ) , ( x ⌊ n 2 ⌋ + 2 , y ⌊ n 2 ⌋ + 2 ) , . . . , ( x n − 1 , y n − 1 ) } X^{[1]}=\{(x_{\lfloor \frac{n}{2} \rfloor+1},y_{\lfloor \frac{n}{2} \rfloor+1}),(x_{\lfloor \frac{n}{2} \rfloor+2},y_{\lfloor \frac{n}{2} \rfloor+2}),...,(x_{n-1},y_{n-1})\} X[1]={(x2n+1,y2n+1),(x2n+2,y2n+2),...,(xn1,yn1)}
构造多项式: X [ 0 ] = { ( x 0 , y 0 ) , ( x 1 , y 1 ) , . . . , ( x ⌊ n 2 ⌋ , y ⌊ n 2 ⌋ ) } X^{[0]}=\{(x_0,y_0),(x_1,y_1),...,(x_{\lfloor \frac{n}{2} \rfloor},y_{\lfloor \frac{n}{2} \rfloor})\} X[0]={(x0,y0),(x1,y1),...,(x2n,y2n)}
X [ 1 ] = { ( x ⌊ n 2 ⌋ + 1 , y ⌊ n 2 ⌋ + 1 ) , ( x ⌊ n 2 ⌋ + 2 , y ⌊ n 2 ⌋ + 2 ) , . . . , ( x n − 1 , y n − 1 ) } X^{[1]}=\{(x_{\lfloor \frac{n}{2} \rfloor+1},y_{\lfloor \frac{n}{2} \rfloor+1}),(x_{\lfloor \frac{n}{2} \rfloor+2},y_{\lfloor \frac{n}{2} \rfloor+2}),...,(x_{n-1},y_{n-1})\} X[1]={(x2n+1,y2n+1),(x2n+2,y2n+2),...,(xn1,yn1)}
A ( x ) , A [ 1 ] ( x ) A(x),A^{[1]}(x) A(x),A[1](x)都未知。
A [ 1 ] ( x i ) = y i − A [ 0 ] ( x i ) P ( x i ) A^{[1]}(x_i)=\frac{y_i-A{[0]}(x_i)}{P(x_i)} A[1](xi)=P(xi)yiA[0](xi)
可以得到一个新的点集 X ′ [ 1 ] X'^{[1]} X[1]
用插值法求出 A [ 1 ] ( x ) A^{[1]}(x) A[1](x),再求 A ( x ) A(x) A(x)
[现在都没调出来…]
复杂度: O ( n log ⁡ 2 n ) O(n\log^2 n) O(nlog2n)

感谢

感谢以下dalao的帮助:
1.Miskcoo大佬:牛顿迭代法在多项式运算的应用
2.CaptainHarryChen学长:多项式的各种操作(逆元,除法,取模,开根,对数,exp,多点求值,插值,牛顿迭代法)
3.alan_cty大佬:拉格朗日反演
同时,也用作学习资料供大家参考。


END

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值