[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