#include <assert.h>
#include <string.h>
+#include <mLib/macros.h>
#include <mLib/sub.h>
#ifndef CATACOMB_MPW_H
extern mp *mp_copy(mp */*m*/);
-#define MP_COPY(m) ((m)->ref++, (m))
+#define MP_COPY(m) MUFFLE_WARNINGS_EXPR(GCC_WARNING("-Wunused-value"), \
+ ((m)->ref++, (m)))
/* --- @mp_drop@ --- *
*
extern mp *mp_odd(mp */*d*/, mp */*m*/, size_t */*s*/);
+/* --- @mp_leastcongruent@ --- *
+ *
+ * Arguments: @mp *d@ = pointer to destination
+ * @mp *b@ = lower bound
+ * @mp *r@ = representative
+ * @mp *m@ = modulus
+ *
+ * Returns: The smallest integer %$x \equiv r \pmod{m}$% such that
+ * %$x \ge b$%.
+ */
+
+extern mp *mp_leastcongruent(mp */*d*/, mp */*b*/, mp */*r*/, mp */*m*/);
+
/*----- More advanced algorithms ------------------------------------------*/
/* --- @mp_sqrt@ --- *
* * %$\jacobi{a}{-1} = 1$% if @a@ is negative, or 1 if
* positive;
* * %$\jacobi{a}{0} = 0$%;
- * * %$\jacobi{a}{2}$ is 0 if @a@ is even, 1 if @a@ is
+ * * %$\jacobi{a}{2}$ is 0 if @a@ is even, 1 if @a@ is
* congruent to 1 or 7 (mod 8), or %$-1$% otherwise.
*
* If %$n$% is positive and odd, then this is the Jacobi
- * symbol. (The Kronecker symbol is a consistant domain
+ * symbol. (The Kronecker symbol is a consistent domain
* extension; the Jacobi symbol was implemented first, and the
* name stuck.)
*/