--- mpmod.c.orig 2006-03-14 16:37:52.000000000 +0100 +++ mpmod.c 2006-03-14 16:40:51.000000000 +0100 @@ -78,7 +78,13 @@ mpz_mod (w, u, n); /* 2^(2lo) mod n = -/+2^(2lo-l) if m*n = 2^l+/-1 */ if (mpz_cmp_ui (w, 1) == 0) /* if 2^(2lo) mod n = 1, then n divides 2^lo+1, since n has lo+1 bits. */ - return lo; + { + if (mpz_scan1 (n, 1) != lo) + lo = 0; + mpz_clear (w); + mpz_clear (u); + return lo; + } k = mpz_sizeinbase (w, 2) - 1; /* if w = 2^k then n divides 2^(2*lo-k)-1 */ mpz_set_ui (u, 1);