cleanup: Big pile of whitespace fixes, all at once.
[u/mdw/catacomb] / mp-jacobi.c
index 2a1e109..d0a67b6 100644 (file)
@@ -1,13 +1,13 @@
 /* -*-c-*-
  *
- * $Id: mp-jacobi.c,v 1.2 1999/12/10 23:19:02 mdw Exp $
+ * $Id$
  *
  * Compute Jacobi symbol
  *
  * (c) 1999 Straylight/Edgeware
  */
 
-/*----- Licensing notice --------------------------------------------------* 
+/*----- Licensing notice --------------------------------------------------*
  *
  * This file is part of Catacomb.
  *
  * it under the terms of the GNU Library General Public License as
  * published by the Free Software Foundation; either version 2 of the
  * License, or (at your option) any later version.
- * 
+ *
  * Catacomb is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Library General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Library General Public
  * License along with Catacomb; if not, write to the Free
  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  * MA 02111-1307, USA.
  */
 
-/*----- Revision history --------------------------------------------------* 
- *
- * $Log: mp-jacobi.c,v $
- * Revision 1.2  1999/12/10 23:19:02  mdw
- * Improve error-checking.
- *
- * Revision 1.1  1999/11/22 20:50:37  mdw
- * Add support for computing Jacobi symbols.
- *
- */
-
 /*----- Header files ------------------------------------------------------*/
 
 #include "mp.h"
@@ -61,6 +50,8 @@ int mp_jacobi(mp *a, mp *n)
 {
   int s = 1;
 
+  assert(MP_ODDP(n));
+
   /* --- Take copies of the arguments --- */
 
   a = MP_COPY(a);
@@ -69,47 +60,27 @@ int mp_jacobi(mp *a, mp *n)
   /* --- Main recursive mess, flattened out into something nice --- */
 
   for (;;) {
+    mpw nn;
+    size_t e;
 
     /* --- Some simple special cases --- */
 
     MP_SHRINK(a);
-
-    if (MP_LEN(a) == 0) {
+    if (MP_ZEROP(a)) {
       s = 0;
       goto done;
     }
 
-    /* --- Find the power-of-two factor in @a@ --- */
-
-    {
-      mpscan sc;
-      mpw nn;
-      unsigned e;
+    /* --- Main case with powers of two --- */
 
-      /* --- Scan for a set bit --- */
-
-      MP_SCAN(&sc, a);
-      e = 0;
-      while (MP_STEP(&sc) && !MP_BIT(&sc))
-       e++;
-
-      /* --- Do the shift --- */
-
-      if (e)
-       a = mp_lsr(a, a, e);
-
-      /* --- Maybe adjust the sign of @s@ --- */
-
-      nn = n->v[0] & 7;
-      if ((e & 1) && (nn == 3 || nn == 5))
-       s = -s;
-
-      if (MP_LEN(a) == 1 && a->v[0] == 1)
-       goto done;
-
-      if ((nn & 3) == 3 && (a->v[0] & 3) == 3)
-       s = -s;
-    }
+    a = mp_odd(a, a, &e);
+    nn = n->v[0] & 7;
+    if ((e & 1) && (nn == 3 || nn == 5))
+      s = -s;
+    if (MP_LEN(a) == 1 && a->v[0] == 1)
+      goto done;
+    if ((nn & 3) == 3 && (a->v[0] & 3) == 3)
+      s = -s;
 
     /* --- Reduce and swap --- */