#include "fmpz_poly.h"
#include "fmpz_mod_poly.h"
#include "fq.h"
void fq_set_fmpz_poly(fq_t a, const fmpz_poly_t b, const fq_ctx_t ctx)
{
if (b->length <= 2*(ctx->modulus->length - 1))
{
fmpz_poly_set(a, b);
fq_reduce(a, ctx);
}
else
{
fmpz_mod_poly_t bp, q, r;
fmpz_mod_poly_init(bp, ctx->ctxp);
fmpz_mod_poly_init(q, ctx->ctxp);
fmpz_mod_poly_init(r, ctx->ctxp);
fmpz_mod_poly_set_fmpz_poly(bp, b, ctx->ctxp);
fmpz_mod_poly_divrem(q, r, bp, ctx->modulus, ctx->ctxp);
fmpz_mod_poly_get_fmpz_poly(a, r, ctx->ctxp);
fmpz_mod_poly_clear(bp, ctx->ctxp);
fmpz_mod_poly_clear(q, ctx->ctxp);
fmpz_mod_poly_clear(r, ctx->ctxp);
}
}