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
943{
947 {
948 return 0;
949 }
951 {
953 {
955 {
959#if (HAVE_FLINT && __FLINT_RELEASE >= 20400)
960 fmpz_t FLINTp;
961 fmpz_mod_poly_t FLINTmipo;
963 fq_t FLINTF, FLINTG;
964
965 fmpz_init (FLINTp);
967
969
970 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
971 fmpz_mod_ctx_t fmpz_ctx;
972 fmpz_mod_ctx_init(fmpz_ctx,FLINTp);
973 fq_ctx_init_modulus (
fq_con, FLINTmipo, fmpz_ctx,
"Z");
974 #else
975 fq_ctx_init_modulus (
fq_con, FLINTmipo,
"Z");
976 #endif
977
980
981 fq_inv (FLINTG, FLINTG,
fq_con);
982 fq_mul (FLINTF, FLINTF, FLINTG,
fq_con);
983
985
986 fmpz_clear (FLINTp);
987 fq_clear (FLINTF,
fq_con);
988 fq_clear (FLINTG,
fq_con);
990 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
991 fmpz_mod_poly_clear (FLINTmipo, fmpz_ctx);
992 fmpz_mod_ctx_clear(fmpz_ctx);
993 #else
994 fmpz_mod_poly_clear (FLINTmipo);
995 #endif
997#else
1000 ZZ_pE::init (NTLmipo);
1004 div (
result, to_ZZ_pE (NTLf), to_ZZ_pE (NTLg));
1006#endif
1007 }
1008 return b(
div (F,
G));
1009 }
1011 }
1013 {
1015 {
1016 if (!
G.inBaseDomain())
1017 {
1020#if (HAVE_FLINT && __FLINT_RELEASE >= 20400)
1021 fmpz_t FLINTp;
1022 fmpz_mod_poly_t FLINTmipo;
1024 fq_poly_t FLINTF;
1025 fq_t FLINTG;
1026
1027 fmpz_init (FLINTp);
1029
1031
1032 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
1033 fmpz_mod_ctx_t fmpz_ctx;
1034 fmpz_mod_ctx_init(fmpz_ctx,FLINTp);
1035 fq_ctx_init_modulus (
fq_con, FLINTmipo, fmpz_ctx,
"Z");
1036 #else
1037 fq_ctx_init_modulus (
fq_con, FLINTmipo,
"Z");
1038 #endif
1039
1042
1043 fq_inv (FLINTG, FLINTG,
fq_con);
1044 fq_poly_scalar_mul_fq (FLINTF, FLINTF, FLINTG,
fq_con);
1045
1048
1049 fmpz_clear (FLINTp);
1050 fq_poly_clear (FLINTF,
fq_con);
1051 fq_clear (FLINTG,
fq_con);
1053 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
1054 fmpz_mod_poly_clear (FLINTmipo, fmpz_ctx);
1055 fmpz_mod_ctx_clear(fmpz_ctx);
1056 #else
1057 fmpz_mod_poly_clear (FLINTmipo);
1058 #endif
1060#else
1063 ZZ_pE::init (NTLmipo);
1066 div (NTLf, NTLf, to_ZZ_pE (NTLg));
1068#endif
1069 }
1070 return b(
div (F,
G));
1071 }
1073 }
1074
1076 {
1077
1080 {
1081#ifdef HAVE_FLINT
1083 {
1084 fmpz_t FLINTpk;
1085 fmpz_init (FLINTpk);
1087 fmpz_mod_poly_t FLINTF, FLINTG;
1090 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
1091 fmpz_mod_ctx_t fmpz_ctx;
1092 fmpz_mod_ctx_init(fmpz_ctx,FLINTpk);
1093 fmpz_mod_poly_divrem (FLINTF, FLINTG, FLINTF, FLINTG, fmpz_ctx);
1094 #else
1095 fmpz_mod_poly_divrem (FLINTF, FLINTG, FLINTF, FLINTG);
1096 #endif
1098 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
1099 fmpz_mod_poly_clear (FLINTG, fmpz_ctx);
1100 fmpz_mod_poly_clear (FLINTF, fmpz_ctx);
1101 fmpz_mod_ctx_clear(fmpz_ctx);
1102 #else
1103 fmpz_mod_poly_clear (FLINTG);
1104 fmpz_mod_poly_clear (FLINTF);
1105 #endif
1106 fmpz_clear (FLINTpk);
1108 }
1110#else
1112 {
1116 ZZ_pX NTLf= to_ZZ_pX (ZZf);
1117 ZZ_pX NTLg= to_ZZ_pX (ZZg);
1118 div (NTLf, NTLf, NTLg);
1120 }
1122#endif
1123 }
1124 else
1125 {
1127 {
1128#if (HAVE_FLINT && __FLINT_RELEASE >= 20400)
1129 fmpz_t FLINTp;
1130 fmpz_mod_poly_t FLINTmipo;
1132 fq_poly_t FLINTF, FLINTG;
1133
1134 fmpz_init (FLINTp);
1136
1138
1139 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
1140 fmpz_mod_ctx_t fmpz_ctx;
1141 fmpz_mod_ctx_init(fmpz_ctx,FLINTp);
1142 fq_ctx_init_modulus (
fq_con, FLINTmipo, fmpz_ctx,
"Z");
1143 #else
1144 fq_ctx_init_modulus (
fq_con, FLINTmipo,
"Z");
1145 #endif
1146
1149
1150 fq_poly_divrem (FLINTF, FLINTG, FLINTF, FLINTG,
fq_con);
1151
1154
1155 fmpz_clear (FLINTp);
1156 fq_poly_clear (FLINTF,
fq_con);
1157 fq_poly_clear (FLINTG,
fq_con);
1159 #if (HAVE_FLINT && __FLINT_RELEASE >= 20700)
1160 fmpz_mod_poly_clear (FLINTmipo, fmpz_ctx);
1161 fmpz_mod_ctx_clear(fmpz_ctx);
1162 #else
1163 fmpz_mod_poly_clear (FLINTmipo);
1164 #endif
1166#else
1169 ZZ_pE::init (NTLmipo);
1172 div (NTLf, NTLf, NTLg);
1174#endif
1175 }
1176#ifdef HAVE_FLINT
1180#else
1182#endif
1183 }
1184 }
1185
1187 ASSERT (F.
level() ==
G.level(),
"expected polys of same level");
1188#if (!defined(HAVE_FLINT) || __FLINT_RELEASE < 20400)
1190 {
1193 }
1194#endif
1198 {
1199#if (HAVE_FLINT && __FLINT_RELEASE >= 20400)
1200 nmod_poly_t FLINTmipo;
1202
1205
1207
1208 fq_nmod_poly_t FLINTF, FLINTG;
1211
1212 fq_nmod_poly_divrem (FLINTF, FLINTG, FLINTF, FLINTG,
fq_con);
1213
1215
1220#else
1222 zz_pE::init (NTLMipo);
1225 div (NTLF, NTLF, NTLG);
1227#endif
1228 }
1229 else
1230 {
1231#ifdef HAVE_FLINT
1232 nmod_poly_t FLINTF, FLINTG;
1235 nmod_poly_div (FLINTF, FLINTF, FLINTG);
1239#else
1242 div (NTLF, NTLF, NTLG);
1244#endif
1245 }
1247}
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)