File indexing completed on 2026-11-07 10:15:15
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef FMPZ_MOD_POLY_FACTOR_H
0014 #define FMPZ_MOD_POLY_FACTOR_H
0015
0016 #ifdef FMPZ_MOD_POLY_FACTOR_INLINES_C
0017 #define FMPZ_MOD_POLY_FACTOR_INLINE
0018 #else
0019 #define FMPZ_MOD_POLY_FACTOR_INLINE static inline
0020 #endif
0021
0022 #include "fmpz_mod_types.h"
0023
0024 #ifdef __cplusplus
0025 extern "C" {
0026 #endif
0027
0028
0029
0030 void fmpz_mod_poly_factor_init(fmpz_mod_poly_factor_t fac,
0031 const fmpz_mod_ctx_t FLINT_UNUSED(ctx));
0032
0033 typedef struct
0034 {
0035 fmpz_mod_poly_struct * baby;
0036 fmpz_mod_poly_struct * res;
0037 fmpz_mod_poly_struct * H;
0038 fmpz_mod_poly_struct * v;
0039 fmpz_mod_poly_struct * vinv;
0040 const fmpz_mod_ctx_struct * ctx;
0041 fmpz * tmp;
0042 slong m;
0043 }
0044 fmpz_mod_poly_interval_poly_arg_t;
0045
0046 void fmpz_mod_poly_factor_clear(fmpz_mod_poly_factor_t fac,
0047 const fmpz_mod_ctx_t ctx);
0048
0049 void fmpz_mod_poly_factor_realloc(fmpz_mod_poly_factor_t fac,
0050 slong alloc, const fmpz_mod_ctx_t ctx);
0051
0052 void fmpz_mod_poly_factor_fit_length(fmpz_mod_poly_factor_t fac,
0053 slong len, const fmpz_mod_ctx_t ctx);
0054
0055 void fmpz_mod_poly_factor_set(fmpz_mod_poly_factor_t res,
0056 const fmpz_mod_poly_factor_t fac, const fmpz_mod_ctx_t ctx);
0057
0058 FMPZ_MOD_POLY_FACTOR_INLINE
0059 void fmpz_mod_poly_factor_swap(fmpz_mod_poly_factor_t a,
0060 fmpz_mod_poly_factor_t b, const fmpz_mod_ctx_t FLINT_UNUSED(ctx))
0061 {
0062 fmpz_mod_poly_factor_struct t = *a;
0063 *a = *b;
0064 *b = t;
0065 }
0066
0067 void fmpz_mod_poly_factor_get_poly(fmpz_mod_poly_t a, const fmpz_mod_poly_factor_t b, slong i, const fmpz_mod_ctx_t ctx);
0068
0069 void fmpz_mod_poly_factor_insert(fmpz_mod_poly_factor_t fac,
0070 const fmpz_mod_poly_t poly, slong exp, const fmpz_mod_ctx_t ctx);
0071
0072 void fmpz_mod_poly_factor_print(const fmpz_mod_poly_factor_t fac,
0073 const fmpz_mod_ctx_t ctx);
0074
0075 void fmpz_mod_poly_factor_print_pretty(const fmpz_mod_poly_factor_t fac,
0076 const char *var, const fmpz_mod_ctx_t ctx);
0077
0078 void fmpz_mod_poly_factor_concat(fmpz_mod_poly_factor_t res,
0079 const fmpz_mod_poly_factor_t fac, const fmpz_mod_ctx_t ctx);
0080
0081 void fmpz_mod_poly_factor_pow(fmpz_mod_poly_factor_t fac, slong exp,
0082 const fmpz_mod_ctx_t FLINT_UNUSED(ctx));
0083
0084 int fmpz_mod_poly_is_irreducible(const fmpz_mod_poly_t f,
0085 const fmpz_mod_ctx_t ctx);
0086
0087 int fmpz_mod_poly_is_irreducible_ddf(const fmpz_mod_poly_t f,
0088 const fmpz_mod_ctx_t ctx);
0089
0090 int fmpz_mod_poly_is_irreducible_rabin(const fmpz_mod_poly_t f,
0091 const fmpz_mod_ctx_t ctx);
0092
0093 int fmpz_mod_poly_is_irreducible_rabin_f(fmpz_t fac,
0094 const fmpz_mod_poly_t f, const fmpz_mod_ctx_t ctx);
0095
0096 int _fmpz_mod_poly_is_squarefree(const fmpz * f, slong len, const fmpz_mod_ctx_t ctx);
0097
0098 int _fmpz_mod_poly_is_squarefree_f(fmpz_t fac,
0099 const fmpz * f, slong len, const fmpz_mod_ctx_t ctx);
0100
0101 int fmpz_mod_poly_is_squarefree(const fmpz_mod_poly_t f,
0102 const fmpz_mod_ctx_t ctx);
0103
0104 int fmpz_mod_poly_is_squarefree_f(fmpz_t fac,
0105 const fmpz_mod_poly_t f, const fmpz_mod_ctx_t ctx);
0106
0107 int fmpz_mod_poly_factor_equal_deg_prob(fmpz_mod_poly_t factor,
0108 flint_rand_t state, const fmpz_mod_poly_t pol, slong d,
0109 const fmpz_mod_ctx_t ctx);
0110
0111 void fmpz_mod_poly_factor_equal_deg_with_frob(
0112 fmpz_mod_poly_factor_t factors, const fmpz_mod_poly_t f, slong d,
0113 const fmpz_mod_poly_t frob, const fmpz_mod_ctx_t ctx);
0114
0115 void fmpz_mod_poly_factor_equal_deg(fmpz_mod_poly_factor_t factors,
0116 const fmpz_mod_poly_t pol, slong d, const fmpz_mod_ctx_t ctx);
0117
0118 void fmpz_mod_poly_factor_distinct_deg_with_frob(
0119 fmpz_mod_poly_factor_t res, const fmpz_mod_poly_t poly,
0120 const fmpz_mod_poly_t polyinv, const fmpz_mod_poly_t frob,
0121 const fmpz_mod_ctx_t ctx);
0122
0123 void fmpz_mod_poly_factor_distinct_deg(fmpz_mod_poly_factor_t res,
0124 const fmpz_mod_poly_t poly, slong * const *degs,
0125 const fmpz_mod_ctx_t ctx);
0126
0127 void fmpz_mod_poly_factor_distinct_deg_threaded_with_frob(
0128 fmpz_mod_poly_factor_t res, const fmpz_mod_poly_t poly,
0129 const fmpz_mod_poly_t polyinv, const fmpz_mod_poly_t frob,
0130 const fmpz_mod_ctx_t ctx);
0131
0132 void fmpz_mod_poly_factor_distinct_deg_threaded(
0133 fmpz_mod_poly_factor_t res, const fmpz_mod_poly_t poly,
0134 slong * const * degs, const fmpz_mod_ctx_t ctx);
0135
0136 void fmpz_mod_poly_factor_squarefree(fmpz_mod_poly_factor_t res,
0137 const fmpz_mod_poly_t f, const fmpz_mod_ctx_t ctx);
0138
0139 void fmpz_mod_poly_factor(fmpz_mod_poly_factor_t res,
0140 const fmpz_mod_poly_t f, const fmpz_mod_ctx_t ctx);
0141
0142 void fmpz_mod_poly_factor_cantor_zassenhaus(fmpz_mod_poly_factor_t res,
0143 const fmpz_mod_poly_t f, const fmpz_mod_ctx_t ctx);
0144
0145 void fmpz_mod_poly_factor_kaltofen_shoup(fmpz_mod_poly_factor_t res,
0146 const fmpz_mod_poly_t poly, const fmpz_mod_ctx_t ctx);
0147
0148 void fmpz_mod_poly_factor_berlekamp(fmpz_mod_poly_factor_t factors,
0149 const fmpz_mod_poly_t f, const fmpz_mod_ctx_t ctx);
0150
0151 void _fmpz_mod_poly_interval_poly_worker(void * arg_ptr);
0152
0153
0154
0155 void fmpz_mod_poly_roots(fmpz_mod_poly_factor_t r,
0156 const fmpz_mod_poly_t f, int with_multiplicity,
0157 const fmpz_mod_ctx_t ctx);
0158
0159 int fmpz_mod_poly_roots_factored(fmpz_mod_poly_factor_t r,
0160 const fmpz_mod_poly_t f, int with_multiplicity, const fmpz_factor_t n,
0161 const fmpz_mod_ctx_t ctx);
0162
0163 int fmpz_mod_poly_roots_factored_with_length_limit(fmpz_mod_poly_factor_t x0,
0164 const fmpz_mod_poly_t f, int with_mult,
0165 slong length_limit,
0166 const fmpz_factor_t fac, const fmpz_mod_ctx_t ctx);
0167
0168
0169
0170 void fmpz_mod_poly_factor_get_fmpz_mod_poly(fmpz_mod_poly_t z,
0171 fmpz_mod_poly_factor_t fac, slong i, const fmpz_mod_ctx_t ctx);
0172
0173 #ifdef __cplusplus
0174 }
0175 #endif
0176
0177 #endif