_gr_poly_compose_mod, gr_poly_compose_mod, _gr_poly_compose_mod_horner, gr_poly_compose_mod_horner, _gr_poly_compose_mod_brent_kung, gr_poly_compose_mod_brent_kung, _gr_poly_compose_mod_preinv, gr_poly_compose_mod_preinv, _gr_poly_compose_mod_horner_preinv, gr_poly_compose_mod_horner_preinv, _gr_poly_compose_mod_brent_kung_preinv, gr_poly_compose_mod_brent_kung_preinv
#include <flint/gr_poly.h>int _gr_poly_compose_mod(gr_ptr res, gr_srcptr poly1, slong len1, gr_srcptr poly2, gr_srcptr poly3, slong len3, gr_ctx_t ctx)sourceint gr_poly_compose_mod(gr_poly_t res, const gr_poly_t poly1, const gr_poly_t poly2, const gr_poly_t poly3, gr_ctx_t ctx)sourceint _gr_poly_compose_mod_horner(gr_ptr res, gr_srcptr poly1, slong len1, gr_srcptr poly2, gr_srcptr poly3, slong len3, gr_ctx_t ctx)sourceint gr_poly_compose_mod_horner(gr_poly_t res, const gr_poly_t poly1, const gr_poly_t poly2, const gr_poly_t poly3, gr_ctx_t ctx)sourceint _gr_poly_compose_mod_brent_kung(gr_ptr res, gr_srcptr poly1, slong len1, gr_srcptr poly2, gr_srcptr poly3, slong len3, gr_ctx_t ctx)sourceint gr_poly_compose_mod_brent_kung(gr_poly_t res, const gr_poly_t poly1, const gr_poly_t poly2, const gr_poly_t poly3, gr_ctx_t ctx)sourceint _gr_poly_compose_mod_preinv(gr_ptr res, gr_srcptr poly1, slong len1, gr_srcptr poly2, gr_srcptr poly3, slong len3, gr_srcptr poly3inv, slong inv3len, gr_ctx_t ctx)sourceint gr_poly_compose_mod_preinv(gr_poly_t res, const gr_poly_t poly1, const gr_poly_t poly2, const gr_poly_t poly3, const gr_poly_t poly3inv, gr_ctx_t ctx)sourceint _gr_poly_compose_mod_horner_preinv(gr_ptr res, gr_srcptr poly1, slong len1, gr_srcptr poly2, gr_srcptr poly3, slong len3, gr_srcptr poly3inv, slong inv3len, gr_ctx_t ctx)sourceint gr_poly_compose_mod_horner_preinv(gr_poly_t res, const gr_poly_t poly1, const gr_poly_t poly2, const gr_poly_t poly3, const gr_poly_t poly3inv, gr_ctx_t ctx)sourceint _gr_poly_compose_mod_brent_kung_preinv(gr_ptr res, gr_srcptr poly1, slong len1, gr_srcptr poly2, gr_srcptr poly3, slong len3, gr_srcptr poly3inv, slong inv3len, gr_ctx_t ctx)sourceint gr_poly_compose_mod_brent_kung_preinv(gr_poly_t res, const gr_poly_t poly1, const gr_poly_t poly2, const gr_poly_t poly3, const gr_poly_t poly3inv, gr_ctx_t ctx)sourceSet res to , where , , are poly1, poly2, poly3, by Horner's rule ( modular multiplications) or by the Brent-Kung baby-step giant-step algorithm [BrentKung1978], which computes powers of , multiplies a matrix of the coefficients of by the matrix of these powers, and combines the results by Horner's rule in , so that the cost is dominated by one by matrix product. The preinv versions take the inverse poly3inv of the reversal of .
The default versions use Horner's rule when or and Brent-Kung otherwise; the Brent-Kung versions themselves return GR_UNABLE when , that is when is not reduced modulo . The non-underscore versions reduce modulo but not . The underscore functions require nonzero lengths and given with exactly coefficients (zero-padded), write coefficients, and do not allow aliasing.
References#
- [BrentKung1978] Brent, R. P. and Kung, H. T. : Fast Algorithms for Manipulating Formal Power Series, J. ACM 25:4 (1978) 581–595
The FLINT team, “_gr_poly_compose_mod, gr_poly_compose_mod, _gr_poly_compose_mod_horner, gr_poly_compose_mod_horner, _gr_poly_compose_mod_brent_kung, gr_poly_compose_mod_brent_kung, _gr_poly_compose_mod_preinv, gr_poly_compose_mod_preinv, _gr_poly_compose_mod_horner_preinv, gr_poly_compose_mod_horner_preinv, _gr_poly_compose_mod_brent_kung_preinv, gr_poly_compose_mod_brent_kung_preinv (gr_poly.h),” FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev, 2026. https://flintlib.org/doc/gr_poly/_gr_poly_compose_mod.html (generated 2026-11-02).
@misc{flint-doc-gr-poly-gr-poly-compose-mod,
author = {{The FLINT team}},
title = {{\_gr\_poly\_compose\_mod, gr\_poly\_compose\_mod, \_gr\_poly\_compose\_mod\_horner, gr\_poly\_compose\_mod\_horner, \_gr\_poly\_compose\_mod\_brent\_kung, gr\_poly\_compose\_mod\_brent\_kung, \_gr\_poly\_compose\_mod\_preinv, gr\_poly\_compose\_mod\_preinv, \_gr\_poly\_compose\_mod\_horner\_preinv, gr\_poly\_compose\_mod\_horner\_preinv, \_gr\_poly\_compose\_mod\_brent\_kung\_preinv, gr\_poly\_compose\_mod\_brent\_kung\_preinv (gr\_poly.h)}},
howpublished = {FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev},
year = {2026},
url = {https://flintlib.org/doc/gr_poly/_gr_poly_compose_mod.html},
note = {Generated 2026-11-02}
}