一元多项式除法与 Ruffini 法则 ¶ 根据 Ruffini 法则,一元多项式除法和多项式求值之间具有紧密的关系。
如果我们利用多项式长除法来计算 f ( X ) / ( X − d ) f(X)/(X-d) f ( X ) / ( X − d ) ,那么我们可以得到一个商多项式 q ( X ) q(X) q ( X ) 和一个余数 r r r ,满足:
f ( X ) = ( X − d ) ⋅ q ( X ) + r f(X) = (X-d)\cdot q(X) + r f ( X ) = ( X − d ) ⋅ q ( X ) + r 这是大家熟知的多项式余数定理,即余数恰好等于 f ( d ) f(d) f ( d ) 。所以当 f ( X ) f(X) f ( X ) 减去余数之后,就可以被 ( X − d ) (X-d) ( X − d ) 整除。那么商多项式 q ( X ) q(X) q ( X ) 和 f ( d ) f(d) f ( d ) 之间的是否也有一定的联系呢?
先上一个结论:商多项式 q ( X ) q(X) q ( X ) 恰好是 f ( X ) f(X) f ( X ) 在 X = d X=d X = d 处求值过程中,所产生的中间计算结果。
我们用系数形式来表示 f ( X ) f(X) f ( X ) ,那么
f ( X ) = a 0 + a 1 X + a 2 X 2 + … + a n X n f(X) = a_0 + a_1X + a_2X^2 + \ldots + a_nX^n f ( X ) = a 0 + a 1 X + a 2 X 2 + … + a n X n 变化下形式可得:
f ( X ) = a 0 + X ( a 1 + X ( a 2 + … + X ( a n − 1 + X a n ) … ) f(X) = a_0 + X(a_1 + X(a_2 + \ldots + X(a_{n-1} + Xa_n)\ldots) f ( X ) = a 0 + X ( a 1 + X ( a 2 + … + X ( a n − 1 + X a n ) … ) 如果要计算「多项式求值」 f ( d ) f(d) f ( d ) , 我们从左到右依次代入 X = d X=d X = d 到上面等式,
q n − 1 = d ⋅ 0 + a n q n − 2 = d ⋅ q n − 1 + a n − 1 ⋮ ⋮ q 1 = d ⋅ q 2 + a 2 q 0 = d ⋅ q 1 + a 1 v = d ⋅ q 0 + a 0 \begin{split}
q_{n-1} &= d\cdot 0 + a_n\\
q_{n-2} &= d\cdot q_{n-1} + a_{n-1} \\
\vdots & \vdots \\
q_1 &= d\cdot q_2 + a_2 \\
q_0 &= d\cdot q_1 + a_1 \\
v &= d\cdot q_0 + a_0 \\
\end{split} q n − 1 q n − 2 ⋮ q 1 q 0 v = d ⋅ 0 + a n = d ⋅ q n − 1 + a n − 1 ⋮ = d ⋅ q 2 + a 2 = d ⋅ q 1 + a 1 = d ⋅ q 0 + a 0 而 ( q 0 , q 1 , … , q n − 1 ) (q_0, q_1, \ldots, q_{n-1}) ( q 0 , q 1 , … , q n − 1 ) 正是商多项式 q ( X ) q(X) q ( X ) 的系数。换句话说,多项式的线性除法过程,其实正是多项式求值过程。
我们看一个简单例子,比如 f ( X ) = 5 + 3 X + 2 X 2 + X 3 f(X) = 5 + 3X + 2X^2 + X^3 f ( X ) = 5 + 3 X + 2 X 2 + X 3 ,我们要计算 f ( − 2 ) f(-2) f ( − 2 ) ,即等同于计算 f ( X ) / ( X + 2 ) f(X)/(X+2) f ( X ) / ( X + 2 ) ,计算过程如下:
q 2 = ( − 2 ) ⋅ 0 + 1 = 1 q 1 = ( − 2 ) ⋅ 1 + 2 = 0 q 0 = ( − 2 ) ⋅ 0 + 3 = 3 v = ( − 2 ) ⋅ 3 + 5 = − 1 \begin{array}{lll}
q_2 &= (-2)\cdot 0 + 1 &= 1\\
q_1 &= (-2)\cdot 1 + 2 &= 0\\
q_0 &= (-2)\cdot 0 + 3 &= 3\\
v & = (-2)\cdot 3 + 5 &= -1\\
\end{array} q 2 q 1 q 0 v = ( − 2 ) ⋅ 0 + 1 = ( − 2 ) ⋅ 1 + 2 = ( − 2 ) ⋅ 0 + 3 = ( − 2 ) ⋅ 3 + 5 = 1 = 0 = 3 = − 1 我们于是得到最后一行的结果 f ( − 2 ) = − 1 f(-2) = -1 f ( − 2 ) = − 1 ,并且在计算过程中附带得到了商多项式 q ( X ) = 3 + X 2 q(X) = 3 + X^2 q ( X ) = 3 + X 2 。
我们可以写一个简单的循环来实现这个计算过程:
fn div_poly(f: &[Scalar], d: Scalar) -> (Vec<Scalar>, Scalar) {
let mut rem = Scalar::zero();
let mut quo = Vec::new();
for c in coeffs.iter().rev() {
rem = rem * d + c;
quo.insert(0, rem);
}
(quo, rem)
}
其实,Ruffini 法则不只针对线性多项式除法适用,也适用于除数多项式时任意次数的除法。这种一般化的算法被称为 Synthetic Division。
以上,我们一直在讨论一元多项式的除法,那么 MLE 的除法呢?幸运的是,Ruffini 法则同样适用于 MLE 多项式除法,MLE 多项式除法的计算过程等同于 MLE 多项式求值过程。
MLE 多项式除法 ¶ 先热身一下,当我们用一个 MLE 除以一个一元线性多项式时,我们可以把 MLE 视为一个一元多项式,其它变元被看成是互相无法计算的常数。这样我们可以用一元多项式除法来快速得到商多项式(n − 1 n-1 n − 1 元 MLE)和余数。
比如
f ~ ( X 0 , X 1 , X 2 ) = 2 ⋅ X 0 X 2 + 3 ⋅ X 1 + 4 ⋅ X 0 \tilde{f}(X_0, X_1, X_2) = 2\cdot X_0X_2 + 3\cdot X_1 + 4\cdot X_0 f ~ ( X 0 , X 1 , X 2 ) = 2 ⋅ X 0 X 2 + 3 ⋅ X 1 + 4 ⋅ X 0 除法如下:
2 ⋅ X 0 X 2 + 3 ⋅ X 1 + 4 ⋅ X 0 ( X 2 − a ) = ( 2 ⋅ X 0 ) X 2 + ( 3 ⋅ X 1 + 4 ⋅ X 0 ) ( X 2 − a ) = 2 ⋅ X 0 , 3 X 1 + ( 4 + 2 a ) X 0 \frac{2\cdot X_0X_2 + 3\cdot X_1 + 4\cdot X_0}{(X_2-a)} = \frac{(2\cdot X_0)X_2 + (3\cdot X_1 + 4\cdot X_0)}{(X_2-a)} = 2\cdot X_0, 3X_1 + (4+ 2a)X_0 ( X 2 − a ) 2 ⋅ X 0 X 2 + 3 ⋅ X 1 + 4 ⋅ X 0 = ( X 2 − a ) ( 2 ⋅ X 0 ) X 2 + ( 3 ⋅ X 1 + 4 ⋅ X 0 ) = 2 ⋅ X 0 , 3 X 1 + ( 4 + 2 a ) X 0 其中余数为 3 X 1 + ( 4 + 2 a ) X 0 3X_1 + (4+ 2a)X_0 3 X 1 + ( 4 + 2 a ) X 0 ,商多项式也是一个 MLE 为 2 ⋅ X 0 2\cdot X_0 2 ⋅ X 0 。那么接下来我们还可以对余数多项式继续做除法,这次我们除以 ( X 1 − b ) (X_1-b) ( X 1 − b ) :
3 X 1 + ( 4 + 2 a ) X 0 ( X 1 − b ) = 3 , ( 4 + 2 a ) X 0 + 3 b \frac{3X_1 + (4+ 2a)X_0}{(X_1-b)} = 3, (4+ 2a)X_0 + 3b ( X 1 − b ) 3 X 1 + ( 4 + 2 a ) X 0 = 3 , ( 4 + 2 a ) X 0 + 3 b 余数多项式为 ( 4 + 2 a ) X 0 + 3 b (4+ 2a)X_0 + 3b ( 4 + 2 a ) X 0 + 3 b ,商多项式为 3。最后,我们继续除法,除数多项式为 ( X 0 − c ) (X_0-c) ( X 0 − c ) :
( 4 + 2 a ) X 0 + 3 b ( X 0 − c ) = 4 + 2 a , 3 b + ( 4 + 2 a ) c \frac{(4+ 2a)X_0 + 3b}{(X_0-c)} = 4+2a, 3b + (4+2a)c ( X 0 − c ) ( 4 + 2 a ) X 0 + 3 b = 4 + 2 a , 3 b + ( 4 + 2 a ) c 余数为 3 b + ( 4 + 2 a ) c 3b + (4+2a)c 3 b + ( 4 + 2 a ) c ,商多项式为 4 + 2 a 4+2a 4 + 2 a 。
至此,我们计算了三次完整的 MLE 多项式除法,分别除以 ( X 2 − a ) (X_2-a) ( X 2 − a ) ,( X 1 − b ) (X_1-b) ( X 1 − b ) 与 ( X 0 − c ) (X_0-c) ( X 0 − c ) 。得到了三个商多项式,和最后的余数。现看看最后的余数,它恰好等于 f ~ ( X ⃗ ) \tilde{f}(\vec{X}) f ~ ( X ) 在 ( c , b , a ) (c,b,a) ( c , b , a ) 处的取值。
这完美符合 Ruffini 法则。
r = 3 b + ( 4 + 2 a ) c = f ~ ( c , b , a ) r= 3b + (4+2a)c = \tilde{f}(c, b, a) r = 3 b + ( 4 + 2 a ) c = f ~ ( c , b , a ) 三个商多项式如下:
q 2 ( X 0 , X 1 ) = 2 ⋅ X 0 q 1 ( X 0 ) = 3 q 0 = 4 + 2 a \begin{split}
q_2(X_0,X_1) &= 2\cdot X_0\\
q_1(X_0) &= 3\\
q_0 &= 4+2a\\
\end{split} q 2 ( X 0 , X 1 ) q 1 ( X 0 ) q 0 = 2 ⋅ X 0 = 3 = 4 + 2 a 不过计算多项式除法不是那么直观,那么接下来我们利用 Ruffini 法则来通过计算 MLE 求值,并且同时计算出商多项式,这个计算过程更加清晰。MLE 的计算过程可以看成是一个折叠的过程,对于每一个变元 X k ∈ { X n − 1 , … , X 0 } X_k\in\{X_{n-1},\ldots, X_0\} X k ∈ { X n − 1 , … , X 0 } ,我们都可以把多项式看成一个一元线性多项式
f ~ ( X ⃗ , X k ) = A + B ⋅ X k \tilde{f}(\vec{X},X_k)=A + B\cdot X_k f ~ ( X , X k ) = A + B ⋅ X k 当我们把 X k = α X_k = \alpha X k = α 代入后,可以得到:
f ~ ( X ⃗ , X k ) = A + α ⋅ B \tilde{f}(\vec{X},X_k)=A + \alpha\cdot B f ~ ( X , X k ) = A + α ⋅ B 如果我们把 f ~ \tilde{f} f ~ 用系数向量来表示,那么这个过程可以看作是关于 α \alpha α 因子的折叠。例如 f ~ ( X 0 , X 1 , X 2 ) = 2 ⋅ X 0 X 2 + 3 ⋅ X 1 + 4 ⋅ X 0 \tilde{f}(X_0, X_1, X_2) = 2\cdot X_0X_2 + 3\cdot X_1 + 4\cdot X_0 f ~ ( X 0 , X 1 , X 2 ) = 2 ⋅ X 0 X 2 + 3 ⋅ X 1 + 4 ⋅ X 0 ,那么它的系数向量为:
( 0 , 4 , 3 , 0 , 0 , 2 , 0 , 0 ) 1 , X 0 , X 1 , X 0 X 1 , X 2 , X 0 X 2 , X 1 X 2 , X 0 X 1 X 2 \begin{array}{cccccccc}
(&0, &4, &3, &0, &0, &2, &0, &0 &) \\
&1, &X_0, &X_1, &X_0X_1, &X_2, &X_0X_2, &X_1X_2, &X_0X_1X_2& \\
\end{array} ( 0 , 1 , 4 , X 0 , 3 , X 1 , 0 , X 0 X 1 , 0 , X 2 , 2 , X 0 X 2 , 0 , X 1 X 2 , 0 X 0 X 1 X 2 ) 这些系数分别对应于第二排的单项式。接下来,假如要计算 f ( c , b , a ) f(c, b, a) f ( c , b , a ) ,我们可以用一个 split-and-fold 的思想来完成计算过程。
( 0 , 4 , 3 , 0 ) + a ⋅ ( 0 , 2 , 0 , 0 ) = ( 0 , 4 + 2 a , 3 , 0 ) ( 0 , 4 + 2 a ) + b ⋅ ( 3 , 0 ) = ( 3 b , 4 + 2 a ) ( 3 b ) + c ⋅ ( 4 + 2 a ) = 3 b + ( 4 + 2 a ) c \begin{split}
(0,4,3,0) + a\cdot {\color{blue}(0,2,0,0)} & = (0, 4+2a, 3, 0)\\
(0, 4+2a) + b\cdot {\color{blue}(3, 0)} & = (3b, 4+2a)\\
(3b) + c\cdot {\color{blue}(4+2a)} & = 3b+ (4+2a)c\\
\end{split} ( 0 , 4 , 3 , 0 ) + a ⋅ ( 0 , 2 , 0 , 0 ) ( 0 , 4 + 2 a ) + b ⋅ ( 3 , 0 ) ( 3 b ) + c ⋅ ( 4 + 2 a ) = ( 0 , 4 + 2 a , 3 , 0 ) = ( 3 b , 4 + 2 a ) = 3 b + ( 4 + 2 a ) c 每一轮,我们都将向量对半拆成两半,把左边的一半加上右边一半乘以一个因子,这样递归三轮,我们会最终得到计算结果 3 b + ( 4 + 2 a ) c 3b+ (4+2a)c 3 b + ( 4 + 2 a ) c ,这个结果也恰好等于前面的多项式除法计算的余数。我们前面提到过,根据 Ruffini 法则,商多项式应该是求值计算过程中的中间结果,那么这个折叠过程中,哪里能找到商多项式的踪迹呢?
商多项式是蓝色标记的向量作为「系数向量」的 MLE 多项式,也就是每一轮 split-and-fold 过程中,右边的半个向量。我们来验证一下,第一行的商多项式是 2 ⋅ X 0 2\cdot X_0 2 ⋅ X 0 ,它是单项式 ( 1 , X 0 , X 1 , X 0 X 1 ) (1,X_0,X_1,X_0X_1) ( 1 , X 0 , X 1 , X 0 X 1 ) 的系数,因此第一个商多项式为 2 X 0 2X_0 2 X 0 ;第二行商多项式是 ( 3 , 0 ) (3,0) ( 3 , 0 ) ,这是一个常数多项式;第三行的商多项式是 ( 4 + 2 a ) (4+2a) ( 4 + 2 a ) ,也是一个常数多项式。这与我们前面手动做除法得到的结果一模一样。
TODO: q_k = f(... 1+u_k, ...) - f(... u_k, ...)
不过,在 ZeroMorph 协议中,MLE 是用「点值形式」来表示,如果我们要用上面的方法来计算除法,则需要先将 MLE 从点值形式转换为系数形式。这个转换过程(类似一元多项式的FFT)的一般化算法的时间复杂度为 O ( N log 2 N ) O(N\log^2N) O ( N log 2 N ) ,即 O ( 2 n ⋅ n 2 ) O(2^n\cdot n^2) O ( 2 n ⋅ n 2 ) 。并且在计算得到商多项式之后,我们还要将 n − 1 n-1 n − 1 个商多项式再通过逆向转换,从系数形式得到点值形式。这会引入不可忽略的转换开销。
其实,我们可以利用 split-and-fold 的思想,直接在 MLE 的「点值形式」上进行求值计算,并且同时计算出商多项式,完全避免「点值形式」和「系数形式」的来回转换。
我们看看 MLE 的点值形式上是如何计算求值的:
f ~ ( X 0 , X 1 , … , X n − 2 , X n − 1 ) = ∑ i ⃗ ∈ { 0 , 1 } n f i ⃗ ⋅ e q ~ ( i ⃗ , X ⃗ ) \tilde{f}(X_0,X_1,\ldots, X_{n-2}, X_{n-1}) = \sum_{\vec{i}\in\{0,1\}^n} f_{\vec{i}} \cdot \tilde{eq}(\vec{i}, \vec{X}) f ~ ( X 0 , X 1 , … , X n − 2 , X n − 1 ) = i ∈ { 0 , 1 } n ∑ f i ⋅ e q ~ ( i , X ) 假设 f ~ \tilde{f} f ~ 的点值形式为向量 ( f 000 , f 100 , … , f 111 ) (f_{000}, f_{100}, \ldots, f_{111}) ( f 000 , f 100 , … , f 111 ) ,对应的 HyperCube 为 { 0 , 1 } 3 \{0,1\}^3 { 0 , 1 } 3 。
我们从右向左对 X n − 1 , … , X 0 X_{n-1},\ldots, X_0 X n − 1 , … , X 0 逐个代入对应的值,比如我们先代入 X n − 1 = u n − 1 X_{n-1}=u_{n-1} X n − 1 = u n − 1 ,那么 f ~ ( 1 ) ( X 0 , X 1 , … , X n − 2 ) \tilde{f}^{(1)}(X_0,X_1,\ldots, X_{n-2}) f ~ ( 1 ) ( X 0 , X 1 , … , X n − 2 ) 的点值式为
( 1 − u n − 1 ) ⋅ ( f 0 , f 1 , … , f 2 n − 2 − 1 ) + u k ⋅ ( f 2 n − 2 , f 2 n − 2 + 1 , … , f 2 n − 1 − 1 ) (1-u_{n-1})\cdot(f_0, f_1, \ldots, f_{2^{n-2}-1}) + u_k\cdot(f_{2^{n-2}}, f_{2^{n-2}+1}, \ldots, f_{2^{n-1}-1}) ( 1 − u n − 1 ) ⋅ ( f 0 , f 1 , … , f 2 n − 2 − 1 ) + u k ⋅ ( f 2 n − 2 , f 2 n − 2 + 1 , … , f 2 n − 1 − 1 ) 这个计算过程也是一个 split-and-fold 的过程,可以一直递归下去,直到向量被折叠成一维。
我们再次用前面的 MLE 多项式,f ~ ( X 0 , X 1 , X 2 ) = 2 ⋅ X 0 X 2 + 3 ⋅ X 1 + 4 ⋅ X 0 \tilde{f}(X_0, X_1, X_2) = 2\cdot X_0X_2 + 3\cdot X_1 + 4\cdot X_0 f ~ ( X 0 , X 1 , X 2 ) = 2 ⋅ X 0 X 2 + 3 ⋅ X 1 + 4 ⋅ X 0 ,它的点值形式为:
( 0 , 4 , 3 , 7 , 0 , 6 , 3 , 9 ) f 000 , f 100 , f 010 , f 110 , f 001 , f 101 , f 011 , f 111 \begin{array}{cccccccc}
(&0, &4, &3, &7, &0, &6, &3, &9 &) \\
&f_{000}, &f_{100}, &f_{010}, &f_{110}, &f_{001}, &f_{101}, &f_{011}, &f_{111}& \\
\end{array} ( 0 , f 000 , 4 , f 100 , 3 , f 010 , 7 , f 110 , 0 , f 001 , 6 , f 101 , 3 , f 011 , 9 f 111 ) 比如,我们代入 ( X 0 = 1 , X 1 = 0 , X 2 = 1 ) (X_0=1,X_1=0,X_2=1) ( X 0 = 1 , X 1 = 0 , X 2 = 1 ) ,那么 f ~ ( 1 , 0 , 1 ) = 2 + 4 = 6 \tilde{f}(1, 0, 1)=2+4=6 f ~ ( 1 , 0 , 1 ) = 2 + 4 = 6 正好对应点值向量的第 f 101 f_{101} f 101 号元素。
下面,我们代入 ( X 0 = c , X 1 = b , X 2 = a ) (X_0=c,X_1=b,X_2=a) ( X 0 = c , X 1 = b , X 2 = a ) ,用 split-and-fold 的方式完成求值过程的计算:
( 1 − a ) ⋅ ( 0 , 4 , 3 , 7 ) + a ⋅ ( 0 , 6 , 3 , 9 ) = ( 0 , 4 + 2 a , 3 , 7 + 2 a ) ( 1 − b ) ⋅ ( 0 , 4 + 2 a ) + b ⋅ ( 3 , 7 + 2 a ) = ( 3 b , ( 1 − b ) ( 4 + 2 a ) + b ( 7 + 2 a ) ) = ( 3 b , 4 + 2 a + 3 b ) ( 1 − c ) ⋅ ( 3 b ) + c ⋅ ( 4 + 2 a + 3 b ) = 3 b − 3 b c + 4 c + 2 a c + 3 b c = 3 b + ( 4 + 2 a ) c \begin{split}
(1-a)\cdot(0,4,3,7) + a\cdot (0,6,3,9) & = (0, 4+2a, 3, 7+2a)\\
(1-b)\cdot(0, 4+2a) + b\cdot (3, 7+2a) & = (3b, (1-b)(4+2a)+b(7+2a)) = (3b, 4+2a+3b)\\
(1-c)\cdot(3b) + c\cdot (4+2a+3b) & = 3b - 3bc +4c+2ac + 3bc = 3b+ (4+2a)c\\
\end{split} ( 1 − a ) ⋅ ( 0 , 4 , 3 , 7 ) + a ⋅ ( 0 , 6 , 3 , 9 ) ( 1 − b ) ⋅ ( 0 , 4 + 2 a ) + b ⋅ ( 3 , 7 + 2 a ) ( 1 − c ) ⋅ ( 3 b ) + c ⋅ ( 4 + 2 a + 3 b ) = ( 0 , 4 + 2 a , 3 , 7 + 2 a ) = ( 3 b , ( 1 − b ) ( 4 + 2 a ) + b ( 7 + 2 a )) = ( 3 b , 4 + 2 a + 3 b ) = 3 b − 3 b c + 4 c + 2 a c + 3 b c = 3 b + ( 4 + 2 a ) c 不出意料,最终的结果仍然是 3 b + ( 4 + 2 a ) c 3b+ (4+2a)c 3 b + ( 4 + 2 a ) c ,不过这次我们不太容易在上面的计算过程中找到商多项式。
每一行的商多项式是右边向量减去左边向量,我们依次看看每一行:
q 2 ( X 0 , X 1 ) : ( 0 , 6 , 3 , 9 ) − ( 0 , 4 , 3 , 7 ) = ( 0 , 2 , 0 , 2 ) q 1 ( X 0 ) : ( 3 , 7 + 2 a ) − ( 0 , 4 + 2 a ) = ( 3 , 3 ) q 0 : ( 4 + 2 a + 3 b ) − ( 3 b ) = 4 + 2 a \begin{split}
q_2(X_0,X_1): & (0, 6, 3, 9) - (0, 4, 3, 7) = (0, 2, 0, 2)\\
q_1(X_0): & (3, 7+2a) - (0, 4+2a) = (3, 3)\\
q_0: & (4+2a+3b) - (3b) = 4+2a\\
\end{split} q 2 ( X 0 , X 1 ) : q 1 ( X 0 ) : q 0 : ( 0 , 6 , 3 , 9 ) − ( 0 , 4 , 3 , 7 ) = ( 0 , 2 , 0 , 2 ) ( 3 , 7 + 2 a ) − ( 0 , 4 + 2 a ) = ( 3 , 3 ) ( 4 + 2 a + 3 b ) − ( 3 b ) = 4 + 2 a 记住,这是商多项式的点值形式,我们可以通过多项式插值,把它们转换成「系数形式」,并且和前面的商多项式做比较。
还有一种方法,是我们前面描述过的,将一个低维的 HyperCube 映射到一个高维的 HyperCube,实际上是低维 Cube 的重复, 因此我们看到 q 2 ( X 0 , X 1 ) q_2(X_0,X_1) q 2 ( X 0 , X 1 ) 的点值形式是 ( 0 , 2 , 0 , 2 ) (0, 2, 0, 2) ( 0 , 2 , 0 , 2 ) ,这正好是一个 2 维 HyperCube 的重复,表示 X 1 X_1 X 1 这个变元的相关系数均为零,所以我们可以快速得到 q 2 ( X 0 , X 1 ) = 2 X 0 q_2(X_0,X_1) = 2X_0 q 2 ( X 0 , X 1 ) = 2 X 0 。同样,q 1 ( X 0 ) q_1(X_0) q 1 ( X 0 ) 的点值形式是 ( 3 , 3 ) (3,3) ( 3 , 3 ) 也是重复的模式,说明含有 X 0 X_0 X 0 变元的单项式系数均为零, 因此 q 1 ( X 0 ) = 3 q_1(X_0) = 3 q 1 ( X 0 ) = 3 ,最后加上 q 0 ( ) = 4 + 2 a q_0() = 4+2a q 0 ( ) = 4 + 2 a ,它们和前面通过系数形式计算得到的商多项式是完全一致的。