// sqrt_mod_p().
// General includes.
-#include "cl_sysdep.h"
+#include "base/cl_sysdep.h"
// Specification.
#include "cln/numtheory.h"
// Implementation.
-#include "cl_I.h"
+#include "integer/cl_I.h"
#include "cln/exception.h"
#undef floor
};
const gcd_result gcd (const pol2& u)
{
- if (zerop(u.c1))
+ if (zerop(u.c1)) {
// constant polynomial u(X)
if (zerop(u.c0))
return gcd_result(2);
else
return gcd_result(0);
+ }
// u(X) = c0 + c1*X has zero -c0/c1.
var cl_MI_x c1inv = R->recip(u.c1);
if (c1inv.condition)
}
}
-#if defined(__GNUC__) && defined(__s390__) && (__GNUC__ == 2) // Workaround GCC-bug (see below)
- struct cl_sylow2gen_property : public cl_property {
- SUBCLASS_cl_property();
- public:
- cl_I h_rep;
- // Constructor.
- cl_sylow2gen_property (const cl_symbol& k, const cl_MI& h) : cl_property (k), h_rep (h.rep) {}
- };
-#endif
-
// Algorithm 3 (for p > 2 only):
// Tonelli-Shanks.
// [Cohen, A Course in Computational Algebraic Number Theory,
// Since this computation is a bit costly, we cache its result
// on the ring's property list.
static const cl_symbol key = (cl_symbol)(cl_string)"generator of 2-Sylow subgroup of (Z/pZ)^*";
-#if !(defined(__GNUC__) && defined(__s390__) && (__GNUC__ == 2)) // Workaround GCC-bug (see above)
struct cl_sylow2gen_property : public cl_property {
SUBCLASS_cl_property();
public:
// Constructor.
cl_sylow2gen_property (const cl_symbol& k, const cl_MI& h) : cl_property (k), h_rep (h.rep) {}
};
-#endif
var cl_sylow2gen_property* prop = (cl_sylow2gen_property*) R->get_property(key);
if (prop)
h = cl_MI(R,prop->h_rep);