You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

输入数组生成多项式展开式系数的技术实现问询

Hey,看起来你已经搞定了数组输入填充的部分,接下来的多项式展开与系数计算完全不需要绕到字符串处理,用多项式迭代乘法的思路就非常清晰,我给你一步步拆解:

一、核心逻辑:逐次乘入根因式

咱们的目标是把 $(X - a_1)(X - a_2)...(X - a_n)$ 展开成 $c_0X^n + c_1X^{n-1} + ... + c_n$ 的形式。可以从最简单的多项式开始,每次乘入一个 $(X - a_i)$,逐步更新系数数组:

  • 初始状态:多项式为 $1$,对应系数数组 [1]
  • 每次乘入 $(X - a)$ 时,新系数数组的生成规则:
    1. 新数组长度 = 原数组长度 + 1
    2. 最高次项系数 = 原数组的最高次项系数(即原数组第一个元素)
    3. 中间项系数 = 原数组对应位置系数 - $a$ × 原数组前一个位置系数
    4. 常数项 = $-a$ × 原数组的常数项(即原数组最后一个元素)
二、实操示例(以你的输入n=2,根为3、2为例)
  1. 初始化系数数组:coeffs = [1]
  2. 处理第一个根3:
    • 新数组长度为2,初始化为[0,0]
    • 新数组[0] = 原数组[0] = 1
    • 新数组[1] = 0 - 3×1 = -3
    • 此时系数数组变为[1, -3],对应多项式 $X - 3$
  3. 处理第二个根2:
    • 新数组长度为3,初始化为[0,0,0]
    • 新数组[0] = 1
    • 新数组[1] = -3 - 2×1 = -5
    • 新数组[2] = 0 - 2×(-3) = 6
    • 最终系数数组就是[1, -5, 6],完美匹配你的预期!
三、生成展开式表达式

有了系数数组后,咱们可以遍历数组拼接字符串,注意处理符号、系数为1/0、次数为1的特殊情况:

  • 对于系数c和对应次数d:
    • 符号:第一项正系数省略+,后续正系数加+,负系数直接写-
    • 系数:系数为1且次数>0时省略1,系数为0时跳过该项
    • 次数:次数为1时写X而非X^1,次数为0时只写常数

还是用例子[1, -5, 6]:

  • 第一项:1×X² → 写成X²
  • 第二项:-5×X¹ → 写成-5X
  • 第三项:6 → 写成+6
  • 拼接后得到X² - 5X + 6
四、代码示例(Python版)
# 假设已经获取了根数组,比如roots = [3, 2]
coeffs = [1]
for root in roots:
    # 初始化新的系数数组
    new_coeffs = [0] * (len(coeffs) + 1)
    # 复制最高次项系数
    new_coeffs[0] = coeffs[0]
    # 处理中间项
    for i in range(1, len(coeffs)):
        new_coeffs[i] = coeffs[i] - root * coeffs[i-1]
    # 处理常数项
    new_coeffs[-1] = -root * coeffs[-1]
    coeffs = new_coeffs

print("系数数组:", coeffs)  # 输出 [1, -5, 6]

# 生成展开式表达式
expr = ""
degree = len(coeffs) - 1
for i in range(len(coeffs)):
    c = coeffs[i]
    current_degree = degree - i
    if c == 0:
        continue  # 跳过系数为0的项
    
    # 处理符号
    if i == 0:
        if c < 0:
            expr += "-"
            c = abs(c)
    else:
        if c > 0:
            expr += "+"
        else:
            expr += "-"
            c = abs(c)
    
    # 处理系数与次数
    if current_degree == 0:
        expr += str(c)
    elif current_degree == 1:
        if c != 1:
            expr += str(c)
        expr += "X"
    else:
        if c != 1:
            expr += str(c)
        expr += f"X^{current_degree}"

print("展开式:", expr)  # 输出 X²-5X+6
为什么不推荐字符串处理?

直接操作系数数组的数学方法比字符串拼接计算更高效,也更不容易出错——尤其是当根的数量多、根为负数或者系数出现0时,字符串处理会变得异常繁琐,而系数迭代的逻辑清晰,维护起来也更简单。

内容的提问来源于stack exchange,提问作者Terko Dok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:04:47