Simplify by using @mp_odd@.
authormdw <mdw>
Thu, 20 Jul 2000 17:14:34 +0000 (17:14 +0000)
committermdw <mdw>
Thu, 20 Jul 2000 17:14:34 +0000 (17:14 +0000)
mp-jacobi.c

index 2a1e109..aba168e 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: mp-jacobi.c,v 1.2 1999/12/10 23:19:02 mdw Exp $
+ * $Id: mp-jacobi.c,v 1.3 2000/07/20 17:14:34 mdw Exp $
  *
  * Compute Jacobi symbol
  *
@@ -30,6 +30,9 @@
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: mp-jacobi.c,v $
+ * Revision 1.3  2000/07/20 17:14:34  mdw
+ * Simplify by using @mp_odd@.
+ *
  * Revision 1.2  1999/12/10 23:19:02  mdw
  * Improve error-checking.
  *
@@ -69,47 +72,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) {
       s = 0;
       goto done;
     }
 
-    /* --- Find the power-of-two factor in @a@ --- */
-
-    {
-      mpscan sc;
-      mpw nn;
-      unsigned e;
-
-      /* --- Scan for a set bit --- */
-
-      MP_SCAN(&sc, a);
-      e = 0;
-      while (MP_STEP(&sc) && !MP_BIT(&sc))
-       e++;
-
-      /* --- Do the shift --- */
+    /* --- Main case with powers of two --- */
 
-      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 --- */