division of univariate polys using FLINT/NTL over F_p, F_q, Z/p^k, Z/p^k[t]/(f), Z, Q, Q(a), if we are in GF factory's default multiplication is used. If b!= 0 and getCharacteristic() == 0 the input will be considered as elements over Z/p^k or Z/p^k[t]/(f); in this case invertiblity of Lc(G) is not checked
942{
946 {
947 return 0;
948 }
950 {
952 {
954 {
958#if (HAVE_FLINT && __FLINT_RELEASE >= 20400)
959 fmpz_t FLINTp;
960 fmpz_mod_poly_t FLINTmipo;
962 fq_t FLINTF, FLINTG;
963
964 fmpz_init (FLINTp);
966
968
969 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
970 fmpz_mod_ctx_t fmpz_ctx;
971 fmpz_mod_ctx_init(fmpz_ctx,FLINTp);
972 fq_ctx_init_modulus (
fq_con, FLINTmipo, fmpz_ctx,
"Z");
973 #else
974 fq_ctx_init_modulus (
fq_con, FLINTmipo,
"Z");
975 #endif
976
979
980 fq_inv (FLINTG, FLINTG,
fq_con);
981 fq_mul (FLINTF, FLINTF, FLINTG,
fq_con);
982
984
985 fmpz_clear (FLINTp);
986 fq_clear (FLINTF,
fq_con);
987 fq_clear (FLINTG,
fq_con);
989 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
990 fmpz_mod_poly_clear (FLINTmipo, fmpz_ctx);
991 fmpz_mod_ctx_clear(fmpz_ctx);
992 #else
993 fmpz_mod_poly_clear (FLINTmipo);
994 #endif
996#else
999 ZZ_pE::init (NTLmipo);
1003 div (
result, to_ZZ_pE (NTLf), to_ZZ_pE (NTLg));
1005#endif
1006 }
1007 return b(
div (F,
G));
1008 }
1010 }
1012 {
1014 {
1015 if (!
G.inBaseDomain())
1016 {
1019#if (HAVE_FLINT && __FLINT_RELEASE >= 20400)
1020 fmpz_t FLINTp;
1021 fmpz_mod_poly_t FLINTmipo;
1023 fq_poly_t FLINTF;
1024 fq_t FLINTG;
1025
1026 fmpz_init (FLINTp);
1028
1030
1031 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
1032 fmpz_mod_ctx_t fmpz_ctx;
1033 fmpz_mod_ctx_init(fmpz_ctx,FLINTp);
1034 fq_ctx_init_modulus (
fq_con, FLINTmipo, fmpz_ctx,
"Z");
1035 #else
1036 fq_ctx_init_modulus (
fq_con, FLINTmipo,
"Z");
1037 #endif
1038
1041
1042 fq_inv (FLINTG, FLINTG,
fq_con);
1043 fq_poly_scalar_mul_fq (FLINTF, FLINTF, FLINTG,
fq_con);
1044
1047
1048 fmpz_clear (FLINTp);
1049 fq_poly_clear (FLINTF,
fq_con);
1050 fq_clear (FLINTG,
fq_con);
1052 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
1053 fmpz_mod_poly_clear (FLINTmipo, fmpz_ctx);
1054 fmpz_mod_ctx_clear(fmpz_ctx);
1055 #else
1056 fmpz_mod_poly_clear (FLINTmipo);
1057 #endif
1059#else
1062 ZZ_pE::init (NTLmipo);
1065 div (NTLf, NTLf, to_ZZ_pE (NTLg));
1067#endif
1068 }
1069 return b(
div (F,
G));
1070 }
1072 }
1073
1075 {
1076
1079 {
1080#ifdef HAVE_FLINT
1082 {
1083 fmpz_t FLINTpk;
1084 fmpz_init (FLINTpk);
1086 fmpz_mod_poly_t FLINTF, FLINTG;
1089 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
1090 fmpz_mod_ctx_t fmpz_ctx;
1091 fmpz_mod_ctx_init(fmpz_ctx,FLINTpk);
1092 fmpz_mod_poly_divrem (FLINTF, FLINTG, FLINTF, FLINTG, fmpz_ctx);
1093 #else
1094 fmpz_mod_poly_divrem (FLINTF, FLINTG, FLINTF, FLINTG);
1095 #endif
1097 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
1098 fmpz_mod_poly_clear (FLINTG, fmpz_ctx);
1099 fmpz_mod_poly_clear (FLINTF, fmpz_ctx);
1100 fmpz_mod_ctx_clear(fmpz_ctx);
1101 #else
1102 fmpz_mod_poly_clear (FLINTG);
1103 fmpz_mod_poly_clear (FLINTF);
1104 #endif
1105 fmpz_clear (FLINTpk);
1107 }
1109#else
1111 {
1115 ZZ_pX NTLf= to_ZZ_pX (ZZf);
1116 ZZ_pX NTLg= to_ZZ_pX (ZZg);
1117 div (NTLf, NTLf, NTLg);
1119 }
1121#endif
1122 }
1123 else
1124 {
1126 {
1127#if (HAVE_FLINT && __FLINT_RELEASE >= 20400)
1128 fmpz_t FLINTp;
1129 fmpz_mod_poly_t FLINTmipo;
1131 fq_poly_t FLINTF, FLINTG;
1132
1133 fmpz_init (FLINTp);
1135
1137
1138 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
1139 fmpz_mod_ctx_t fmpz_ctx;
1140 fmpz_mod_ctx_init(fmpz_ctx,FLINTp);
1141 fq_ctx_init_modulus (
fq_con, FLINTmipo, fmpz_ctx,
"Z");
1142 #else
1143 fq_ctx_init_modulus (
fq_con, FLINTmipo,
"Z");
1144 #endif
1145
1148
1149 fq_poly_divrem (FLINTF, FLINTG, FLINTF, FLINTG,
fq_con);
1150
1153
1154 fmpz_clear (FLINTp);
1155 fq_poly_clear (FLINTF,
fq_con);
1156 fq_poly_clear (FLINTG,
fq_con);
1158 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
1159 fmpz_mod_poly_clear (FLINTmipo, fmpz_ctx);
1160 fmpz_mod_ctx_clear(fmpz_ctx);
1161 #else
1162 fmpz_mod_poly_clear (FLINTmipo);
1163 #endif
1165#else
1168 ZZ_pE::init (NTLmipo);
1171 div (NTLf, NTLf, NTLg);
1173#endif
1174 }
1175#ifdef HAVE_FLINT
1179#else
1181#endif
1182 }
1183 }
1184
1186 ASSERT (F.
level() ==
G.level(),
"expected polys of same level");
1187#if (!defined(HAVE_FLINT) || __FLINT_RELEASE < 20400)
1189 {
1192 }
1193#endif
1197 {
1198#if (HAVE_FLINT && __FLINT_RELEASE >= 20400)
1199 nmod_poly_t FLINTmipo;
1201
1204
1206
1207 fq_nmod_poly_t FLINTF, FLINTG;
1210
1211 fq_nmod_poly_divrem (FLINTF, FLINTG, FLINTF, FLINTG,
fq_con);
1212
1214
1219#else
1221 zz_pE::init (NTLMipo);
1224 div (NTLF, NTLF, NTLG);
1226#endif
1227 }
1228 else
1229 {
1230#ifdef HAVE_FLINT
1231 nmod_poly_t FLINTF, FLINTG;
1234 nmod_poly_div (FLINTF, FLINTF, FLINTG);
1238#else
1241 div (NTLF, NTLF, NTLG);
1243#endif
1244 }
1246}
CanonicalForm convertFq_poly_t2FacCF(const fq_poly_t p, const Variable &x, const Variable &alpha, const fq_ctx_t ctx)
conversion of a FLINT poly over Fq (for non-word size p) to a CanonicalForm with alg....
void convertFacCF2Fq_t(fq_t result, const CanonicalForm &f, const fq_ctx_t ctx)
conversion of a factory element of F_q (for non-word size p) to a FLINT fq_t
CanonicalForm convertFq_nmod_poly_t2FacCF(const fq_nmod_poly_t p, const Variable &x, const Variable &alpha, const fq_nmod_ctx_t ctx)
conversion of a FLINT poly over Fq to a CanonicalForm with alg. variable alpha and polynomial variabl...
CanonicalForm convertFq_t2FacCF(const fq_t poly, const Variable &alpha)
conversion of a FLINT element of F_q with non-word size p to a CanonicalForm with alg....
CanonicalForm convertFmpz_mod_poly_t2FacCF(const fmpz_mod_poly_t poly, const Variable &x, const modpk &b)
conversion of a FLINT poly over Z/p (for non word size p) to a CanonicalForm over Z
CanonicalForm convertnmod_poly_t2FacCF(const nmod_poly_t poly, const Variable &x)
conversion of a FLINT poly over Z/p to CanonicalForm
void convertFacCF2Fmpz_mod_poly_t(fmpz_mod_poly_t result, const CanonicalForm &f, const fmpz_t p)
conversion of a factory univariate poly over Z to a FLINT poly over Z/p (for non word size p)
void convertFacCF2Fq_nmod_poly_t(fq_nmod_poly_t result, const CanonicalForm &f, const fq_nmod_ctx_t ctx)
conversion of a factory univariate poly over F_q to a FLINT fq_nmod_poly_t
void convertCF2initFmpz(fmpz_t result, const CanonicalForm &f)
conversion of a factory integer to fmpz_t(init.)
void convertFacCF2Fq_poly_t(fq_poly_t result, const CanonicalForm &f, const fq_ctx_t ctx)
conversion of a factory univariate poly over F_q (for non-word size p) to a FLINT fq_poly_t
ZZX convertFacCF2NTLZZX(const CanonicalForm &f)
zz_pEX convertFacCF2NTLzz_pEX(const CanonicalForm &f, const zz_pX &mipo)
CanonicalForm convertNTLzz_pEX2CF(const zz_pEX &f, const Variable &x, const Variable &alpha)
ZZ_pEX convertFacCF2NTLZZ_pEX(const CanonicalForm &f, const ZZ_pX &mipo)
CanonicalForm in Z_p(a)[X] to NTL ZZ_pEX.
CanonicalForm convertNTLzzpX2CF(const zz_pX &poly, const Variable &x)
CanonicalForm convertNTLZZpX2CF(const ZZ_pX &poly, const Variable &x)
NAME: convertNTLZZpX2CF.
CanonicalForm convertNTLZZX2CF(const ZZX &polynom, const Variable &x)
CanonicalForm convertNTLZZ_pEX2CF(const ZZ_pEX &f, const Variable &x, const Variable &alpha)
zz_pX convertFacCF2NTLzzpX(const CanonicalForm &f)
ZZ_pX convertFacCF2NTLZZpX(const CanonicalForm &f)
NAME: convertFacCF2NTLZZpX.
ZZ convertFacCF2NTLZZ(const CanonicalForm &f)
NAME: convertFacCF2NTLZZX.
#define ASSERT(expression, message)
#define GaloisFieldDomain
factory's class for variables
fq_nmod_ctx_clear(fq_con)
nmod_poly_init(FLINTmipo, getCharacteristic())
fq_nmod_ctx_init_modulus(fq_con, FLINTmipo, "Z")
convertFacCF2nmod_poly_t(FLINTmipo, M)
nmod_poly_clear(FLINTmipo)
fq_nmod_poly_clear(prod, fq_con)
CanonicalForm divFLINTQ(const CanonicalForm &F, const CanonicalForm &G)
void newtonDiv(const CanonicalForm &F, const CanonicalForm &G, CanonicalForm &Q)
CanonicalForm getMipo(const Variable &alpha, const Variable &x)