/** * Multifactor Hensel lifting for the univariate factorization engine * (`functions/src/typed/factorization/`). * * Given a MONIC integer polynomial `f` and its MONIC irreducible factors over * 𝔽_p (whose product is ≡ f mod p), lift that factorization to a factorization * modulo `p^k` whose product is ≡ f (mod p^k), with each lifted factor still * ≡ its input factor (mod p). The target modulus `p^k` is chosen by the caller * so that `p^k ≥ 2·landauMignotte(f)+1`, i.e. large enough that the true * integer factors of `f` are uniquely recovered by symmetric reduction. * * Strategy: LINEAR (iterated) two-factor Hensel lifting from `p^i` to `p^{i+1}` * up to `p^k`, combined with a recursive FACTOR TREE for more than two factors. * Bézout cofactors `s, t` with `s·g + t·h ≡ 1 (mod p)` are computed once per * two-factor split via the extended Euclidean algorithm over 𝔽_p; because the * per-step diophantine correction is solved only mod p, the fixed mod-p * cofactors remain valid at every lifting step (the standard property of linear * Hensel lifting — see Geddes/Czapor/Labahn §6.4 or von zur Gathen & Gerhard * §15). All factors are monic and `f` is monic, so the lifted factors stay * monic and no leading-coefficient imposition is required. * * `bigint`-only by design: float64 loses correctness once `p^k > 2^53`. */ import { type IntPoly } from './integer-poly.js'; /** * Multifactor Hensel lift. Lifts the mod-`p` factorization `factorsModP` of the * monic integer polynomial `f` (with `∏ factorsModP ≡ f mod p`) to monic * integer factors whose product is `≡ f (mod targetPk)` and each of which is * `≡ its input factor (mod p)`. Coefficients are returned in the symmetric * range modulo `targetPk = p^k` (via `modSymmetric`). * * More than two factors are handled by a recursive factor tree: `factorsModP` * is split into two halves, the two half-products are lifted together by * `henselLiftTwo`, and each lifted half is recursively split into its own * factors. */ export declare function henselLift(f: IntPoly, factorsModP: IntPoly[], p: bigint, targetPk: bigint): IntPoly[]; //# sourceMappingURL=hensel.d.ts.map