FLINT3.7.0-dev

_fmpz_poly_mul_SS, fmpz_poly_mul_SS, _fmpz_poly_mullow_SS, fmpz_poly_mullow_SS, _fmpz_poly_mulmid_SS, fmpz_poly_mulmid_SS

Synopsis#include <flint/fmpz_poly.h>
void _fmpz_poly_mul_SS(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2)source
void fmpz_poly_mul_SS(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2)source
void _fmpz_poly_mullow_SS(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2, slong n)source
void fmpz_poly_mullow_SS(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong n)source
void _fmpz_poly_mulmid_SS(fmpz * res, const fmpz * poly1, slong len1, const fmpz * poly2, slong len2, slong nlo, slong nhi)source
void fmpz_poly_mulmid_SS(fmpz_poly_t res, const fmpz_poly_t poly1, const fmpz_poly_t poly2, slong nlo, slong nhi)source

Multiply by a Schönhage–Strassen convolution (Schönhage–Strassen multiplication): each coefficient becomes one element of \mathbb{Z}/(2^N + 1)\mathbb{Z} large enough for the coefficients of the product, and the product is a convolution of power-of-two length computed with fft_convolution (or fft_convolution_sd_fft, whose pointwise products use fft_small). For a window that does not reach the top of the product, a cyclic convolution of a power-of-two length \ge \max(\mathit{nhi}, \mathit{len1} + \mathit{len2} - 1 - \mathit{nlo}) is used when it is shorter than the truncated transform, so that the wrapped-around terms land below \mathit{nlo} (fft_convolution_choose_mid). The underscore versions require positive lengths (in either order), allow zero padding and allow res to be equal to an input. The convolutions use flint_get_num_threads threads.

Cite this page

The FLINT team, “_fmpz_poly_mul_SS, fmpz_poly_mul_SS, _fmpz_poly_mullow_SS, fmpz_poly_mullow_SS, _fmpz_poly_mulmid_SS, fmpz_poly_mulmid_SS (fmpz_poly.h),” FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev, 2026. https://flintlib.org/doc/fmpz_poly/_fmpz_poly_mul_SS.html (generated 2026-10-20).