[SCM] an open source computer algebra system branch, cleanedupstream, updated. 6125e540ca6d66c307958938a9d53b245507c323
Bernhard R. Link
brlink at debian.org
Tue Apr 24 15:54:51 UTC 2012
The following commit has been merged in the cleanedupstream branch:
commit 832f12a42675848b364ff404f70b667c795f74d2
Author: Martin Lee <martinlee84 at web.de>
Date: Thu Feb 16 15:19:10 2012 +0100
chg: added divisibility test for univariate polys
diff --git a/factory/facMul.cc b/factory/facMul.cc
index 96dab9a..a880677 100644
--- a/factory/facMul.cc
+++ b/factory/facMul.cc
@@ -2496,6 +2496,53 @@ void divrem (const CanonicalForm& F, const CanonicalForm& G, CanonicalForm& Q,
return;
}
+bool
+uniFdivides (const CanonicalForm& A, const CanonicalForm& B)
+{
+ int p= getCharacteristic();
+ if (p > 0)
+ {
+ zz_p::init (p);
+ Variable alpha;
+ if (hasFirstAlgVar (A, alpha) || hasFirstAlgVar (B, alpha))
+ {
+ zz_pX NTLMipo= convertFacCF2NTLzzpX (getMipo (alpha));
+ zz_pE::init (NTLMipo);
+ zz_pEX NTLA= convertFacCF2NTLzz_pEX (A, NTLMipo);
+ zz_pEX NTLB= convertFacCF2NTLzz_pEX (B, NTLMipo);
+ return divide (NTLB, NTLA);
+ }
+#ifdef HAVE_FLINT
+ nmod_poly_t FLINTA, FLINTB;
+ convertFacCF2nmod_poly_t (FLINTA, A);
+ convertFacCF2nmod_poly_t (FLINTB, B);
+ nmod_poly_rem (FLINTA, FLINTB, FLINTA);
+ bool result= nmod_poly_is_zero (FLINTA);
+ nmod_poly_clear (FLINTA);
+ nmod_poly_clear (FLINTB);
+ return result;
+#else
+ zz_pX NTLA= convertFacCF2NTLzzpX (A);
+ zz_pX NTLB= convertFacCF2NTLzzpX (B);
+ return divide (NTLB, NTLA);
+#endif
+ }
+#ifdef HAVE_FLINT
+ fmpq_poly_t FLINTA,FLINTB;
+ fmpq_poly_init (FLINTA);
+ fmpq_poly_init (FLINTB);
+ convertFacCF2Fmpq_poly_t (FLINTA, A);
+ convertFacCF2Fmpq_poly_t (FLINTB, B);
+ fmpq_poly_rem (FLINTA, FLINTB, FLINTA);
+ bool result= fmpq_poly_is_zero (FLINTA);
+ fmpq_poly_clear (FLINTA);
+ fmpq_poly_clear (FLINTB);
+ return result;
+#else
+ return fdivides (A, B); //maybe NTL?
+#endif
+}
+
// end division
#endif
diff --git a/factory/facMul.h b/factory/facMul.h
index 76337e0..a25f85f 100644
--- a/factory/facMul.h
+++ b/factory/facMul.h
@@ -98,6 +98,14 @@ newtonDiv (const CanonicalForm& F, ///< [in] bivariate, compressed polynomial
const CanonicalForm& M ///< [in] power of Variable (2)
);
+/// divisibility test for univariate polys
+///
+/// @return @a uniFdivides returns true if A divides B
+bool
+uniFdivides (const CanonicalForm& A, ///< [in] univariate poly
+ const CanonicalForm& B ///< [in] univariate poly
+ );
+
/// Karatsuba style modular multiplication for bivariate polynomials.
///
/// @return @a mulMod2 returns @a A * @a B mod @a M.
--
an open source computer algebra system
More information about the debian-science-commits
mailing list