_mpn_mod_vec_dot, _mpn_mod_vec_dot_rev, _mpn_mod_vec_dot_strided
#include <flint/mpn_mod.h>int _mpn_mod_vec_dot(nn_ptr res, nn_srcptr initial, int subtract, nn_srcptr vec1, nn_srcptr vec2, slong len, gr_ctx_t ctx)sourceint _mpn_mod_vec_dot_rev(nn_ptr res, nn_srcptr initial, int subtract, nn_srcptr vec1, nn_srcptr vec2, slong len, gr_ctx_t ctx)sourceint _mpn_mod_vec_dot_strided(nn_ptr res, nn_srcptr initial, int subtract, nn_srcptr vec1, slong stride1, nn_srcptr vec2, slong stride2, slong len, gr_ctx_t ctx)sourceSet res to s + \sum_i a_i b_i, or s - \sum_i a_i b_i if subtract is nonzero, where s is initial (zero if initial is NULL), a_i = vec1[i] and b_i = vec2[i], vec2[len - 1 - i] or the entries of the strided vectors (strides counted in elements, possibly negative).
The sum of the full 2\ell-limb products is accumulated exactly in \lceil (2 b + \lfloor \log_2 \mathit{len} \rfloor + 1) / \mathtt{FLINT\_BITS} \rceil limbs and reduced once at the end (delayed reduction). For \ell \le 4 the accumulation uses the generated fixed-size kernels of mpn_extras (flint_mpn_dot_tab and its strided and reversed variants); for larger \ell, flint_mpn_mul_n and mpn_add_n with one carry limb. Lengths 1 and 2 use mpn_mod_mul and mpn_mod_fmma.
The FLINT team, “_mpn_mod_vec_dot, _mpn_mod_vec_dot_rev, _mpn_mod_vec_dot_strided (mpn_mod.h),” FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev, 2026. https://flintlib.org/doc/mpn_mod/_mpn_mod_vec_dot.html (generated 2026-10-20).
@misc{flint-doc-mpn-mod-mpn-mod-vec-dot,
author = {{The FLINT team}},
title = {{\_mpn\_mod\_vec\_dot, \_mpn\_mod\_vec\_dot\_rev, \_mpn\_mod\_vec\_dot\_strided (mpn\_mod.h)}},
howpublished = {FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev},
year = {2026},
url = {https://flintlib.org/doc/mpn_mod/_mpn_mod_vec_dot.html},
note = {Generated 2026-10-20}
}