一、高次韦达定理(Vieta’s Formulas)

韦达定理给出多项式的系数与**根的初等对称多项式(elementary symmetric polynomials)之间的关系。

次多项式:

它的 个根(计重数)为

定义初等对称多项式 = 所有「从 个根里取 个相乘」的项之和:

韦达定理:

展开写就是:

符号规律: 系数比前面的正负号是 是取根的个数。奇数个根 → 负号,偶数个 → 正号。

最常见的例子(二次、三次):

二次 ,根

三次 ,根


二、牛顿和 / 牛顿恒等式(Newton’s Identities)

牛顿和处理的是幂和(power sums),定义:

也就是「所有根的 次方之和」。注意区别: 是乘积之和, 是幂之和。

牛顿恒等式建立了 之间的递推桥梁。

形式一(,前几项要特别记):

通项规律( 时):

注意最后一项有个 的系数,而且这一项只在 时出现。

形式二(,递推不再有 那一项):

时,因为 全是 0,递推变得很干净:

这个本质就是:每个根都满足原方程 ,把方程乘 再对所有根求和,就得到这个线性递推。


三、为什么这俩要一起用

很多竞赛题问的是「求 」或者「求某个对称表达式」,但题目只给你方程的系数。流程是:

系数 初等对称多项式 幂和

韦达把系数翻译成 ,牛顿把 翻译成 ,配合起来就能算任意次幂和。


四、完整例题演示

例题: 的三个根为 。求 (即各根的 1 到 4 次方和)。

第一步:韦达求

第二步:牛顿求

,最后一项带 ):

,用形式二,没有 项):

答案:


五、记忆要点(速查)

要点包括:韦达的符号是 ,取奇数个根带负号;牛顿前三个 必须背熟;当 时递推末项是 (注意那个孤零零的系数 );当 时递推退化成 阶线性递推,不再有 单独项。

Confidence: 0.97

补充一句我的看法:竞赛里真正容易出错的地方不是公式本身,而是 那个临界点——很多人会忘记末项的 系数,或者在 时还硬塞一个 进去。建议做题时先明确写出 是多少,然后逐项对照「现在 大还是小」,能避开 90% 的失误。

你这句” 是负数”有两种可能的意思,我分开说,重点讲第二种(更可能是你想问的)。

情形一:算出来的 值是负数。 这没有任何特殊处理——幂和(power sum)本来就可以是负的(根有负数或复数时很正常)。比如刚那份考卷 P3 里 ,全是直接用递推 推出来的,负号照常参与运算,不用管它。

情形二:下标 是负数,即负次幂和(negative power sum) 这才是真正需要技巧的,方法是:

对”反转多项式(reversed polynomial)“跑普通牛顿。

原理(一句话): 的非零根,两边除以 ,令 ,就得到 。所以 恰好是系数倒序那个多项式 的根。于是原多项式的负次幂和 = 反转多项式的正次幂和,普通牛顿直接套。

实操三步:

  1. 把系数倒序写出
  2. 它的初等对称多项式直接是原多项式的比值:。也就是 ……
  3. 对这些 跑牛顿,得到的 就是

例子(就用 P3 的 ): 反转后是 ,所以 。牛顿:


(正好就是 P3(c) 的

一个硬约束: 必须 (即没有零根),否则 没定义,负次幂和不存在。

小验证脚本:

import sympy as sp
x = sp.symbols('x')
r = sp.Poly(x**3 - 3*x**2 + 4*x - 1, x).all_roots()
for k in [1, 2, 3]:
    print(f"p_-{k} =", sp.nsimplify(sp.simplify(sum(1/ri**k for ri in r))))
# 期望输出: 4, 10, 31
 
# pip install sympy -i https://pypi.tuna.tsinghua.edu.cn/simple

Confidence: 0.97 | 反转多项式法是标准做法,例子与考卷 P3(c) 答案 自洽。 Caveats: 若你问的其实是情形一(值为负),那答案就是”不用特殊处理”;另外这套方法只适用于无零根的多项式。