核心概述

多项式代数(Polynomial Algebra)覆盖多项式的系数表示、加减乘除(卷积与带余除法)、求值与多点变换、GCD 与级数运算(逆、开方、ln、exp 等),在可用域下可用 FFT/NTT 将主要操作加速至近线性时间。

原文引述

Description: Polynomial algebra with coefficient representation: add, multiply (FFT/NTT), evaluation, interpolation, division with remainder, GCD, and series operations (inverse, sqrt, log, exp) via Newton iteration. Time: Multiply O(n log n); divide O(n log n); series ops O(n log n) each Status: tested ——摘自本节点现有英文注释

展开阐述

  • 数据结构(据实现)

    • struct Poly:vector coeff;支持 trim()(去除尾部零)、deg()(次数)、operator[] 访问。
    • 可选:mod 域包装(T=ModInt)自动取模;大整数版(__int128 或 BigInt)。
  • 基本操作

  • 多项式除法(带余)

    • 给定 A, B (deg B ≤ deg A),求 Q,R 使 A = Q·B + R,deg R < deg B。
    • 逆序法:设 Arev(x)=x^{deg A}·A(1/x),Brev(x)=x^{deg B}·B(1/x)。
      • Qrev(x) = Arev(x) / Brev(x)(在模 x^{deg A−deg B+1} 下的除法)。
      • Q(x) = x^{deg A−deg B}·Qrev(1/x)。
      • R = A − Q·B。
    • 复杂度 O(n log n)(依赖卷积)。
  • 多项式 GCD

    • 模下:类似整数 GCD,用欧几里得算法,每次除法用多项式除法实现。
    • 可用余数序列降次,必要时用伪余数(乘以首项系数幂)保持整系数。
  • 幂级数运算(Newton 迭代)

    • 逆:设 F·G = 1 (mod x^k),已知 G mod x^{⌈k/2⌉} 求 G mod x^k:
      • G_new = G·(2 − F·G) (mod x^k)。
    • 开方:设 G^2 = F (mod x^k),已知 G mod x^{⌈k/2⌉}:
      • G_new = (G + F·inv(G))·inv(2) (mod x^k)。
    • ln 与 exp:通过积分/微分与逆/乘法组合实现(见模板)。
    • 每次迭代复杂度 O(k log k),总 O(n log n)。
  • 输出语义

    • 所有操作返回 Poly 对象,系数按升幂排列(a_0 + a_1 x + …)。
    • 除法返回 {Q, R} 或仅 Q(依接口)。
  • 复杂度

    • 加减 O(n);乘法 O(n log n);除法 O(n log n);求值 O(n) 或 O(n log^2 n) 批量;系列运算 O(n log n)。
  • 使用与注意

    • 模域:所有运算在模内进行,见 094-数论-模运算099-数值算法-模域FFT
    • 首项系数:系列运算要求常数项可逆(如逆、开方)。
    • 规范化:操作后 trim() 去除尾部零,保持 deg 正确。
    • 卷积实现:复数 FFT 有舍入误差;模域 NTT 精确但需友好模数。

关联节点