FLINT3.7.0-dev

_gr_poly_div_series, gr_poly_div_series, _gr_poly_div_series_basecase_preinv1, _gr_poly_div_series_basecase_noinv, _gr_poly_div_series_basecase, gr_poly_div_series_basecase, _gr_poly_div_series_divconquer, gr_poly_div_series_divconquer, _gr_poly_div_series_invmul, gr_poly_div_series_invmul, _gr_poly_div_series_newton, gr_poly_div_series_newton

Synopsis#include <flint/gr_poly.h>
int _gr_poly_div_series(gr_ptr res, gr_srcptr A, slong Alen, gr_srcptr B, slong Blen, slong len, gr_ctx_t ctx)source
int gr_poly_div_series(gr_poly_t res, const gr_poly_t A, const gr_poly_t B, slong len, gr_ctx_t ctx)source
int _gr_poly_div_series_basecase_preinv1(gr_ptr Q, gr_srcptr A, slong Alen, gr_srcptr B, slong Blen, gr_srcptr Binv, slong len, gr_ctx_t ctx)source
int _gr_poly_div_series_basecase_noinv(gr_ptr Q, gr_srcptr A, slong Alen, gr_srcptr B, slong Blen, slong len, gr_ctx_t ctx)source
int _gr_poly_div_series_basecase(gr_ptr res, gr_srcptr A, slong Alen, gr_srcptr B, slong Blen, slong len, gr_ctx_t ctx)source
int gr_poly_div_series_basecase(gr_poly_t res, const gr_poly_t A, const gr_poly_t B, slong len, gr_ctx_t ctx)source
int _gr_poly_div_series_divconquer(gr_ptr res, gr_srcptr A, slong Alen, gr_srcptr B, slong Blen, slong len, slong cutoff, gr_ctx_t ctx)source
int gr_poly_div_series_divconquer(gr_poly_t Q, const gr_poly_t A, const gr_poly_t B, slong len, slong cutoff, gr_ctx_t ctx)source
int _gr_poly_div_series_invmul(gr_ptr res, gr_srcptr A, slong Alen, gr_srcptr B, slong Blen, slong len, gr_ctx_t ctx)source
int gr_poly_div_series_invmul(gr_poly_t res, const gr_poly_t A, const gr_poly_t B, slong len, gr_ctx_t ctx)source
int _gr_poly_div_series_newton(gr_ptr res, gr_srcptr A, slong Alen, gr_srcptr B, slong Blen, slong len, slong cutoff, gr_ctx_t ctx)source
int gr_poly_div_series_newton(gr_poly_t res, const gr_poly_t A, const gr_poly_t B, slong len, slong cutoff, gr_ctx_t ctx)source

Set res to the power series quotient A / B \bmod x^{\mathit{len}}. Returns GR_DOMAIN if B = 0; if the constant term of B is not invertible, the quotient may still exist, and the basecase, noinv and divconquer algorithms find it whenever every coefficient division is exact.

The basecase computes the quotient coefficient by coefficient (preinv1: with a precomputed inverse Binv of the constant term; noinv: dividing with gr_div at each step); divconquer splits the quotient in halves; invmul multiplies A by B^{-1}; newton uses Newton iteration for B^{-1} to half the length and a Karp-Markstein step. gr_poly_div_series calls the ring method GR_METHOD_POLY_DIV_SERIES, whose default uses the basecase when \min(\mathit{Blen}, \mathit{len}) \le 8 or the ring has only classical multiplication, and Newton iteration otherwise, falling back to divide-and-conquer if the constant term is not invertible. The underscore versions require positive lengths, write len coefficients and do not allow aliasing.

Cite this page

The FLINT team, “_gr_poly_div_series, gr_poly_div_series, _gr_poly_div_series_basecase_preinv1, _gr_poly_div_series_basecase_noinv, _gr_poly_div_series_basecase, gr_poly_div_series_basecase, _gr_poly_div_series_divconquer, gr_poly_div_series_divconquer, _gr_poly_div_series_invmul, gr_poly_div_series_invmul, _gr_poly_div_series_newton, gr_poly_div_series_newton (gr_poly.h),” FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev, 2026. https://flintlib.org/doc/gr_poly/_gr_poly_div_series.html (generated 2026-10-20).