Use @MP_EQ@ instead of @MP_CMP@. Remove vestages of @primorial@.
[u/mdw/catacomb] / primorial.c
index 49cc054..68c45ad 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: primorial.c,v 1.1 1999/12/22 15:51:02 mdw Exp $
+ * $Id: primorial.c,v 1.4 2000/08/15 21:41:09 mdw Exp $
  *
  * Computes the product of the small primes
  *
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: primorial.c,v $
+ * Revision 1.4  2000/08/15 21:41:09  mdw
+ * Bug fix: minimize the right thing.
+ *
+ * Revision 1.3  2000/07/15 10:02:07  mdw
+ * Include missing header file.
+ *
+ * Revision 1.2  2000/07/09 21:31:43  mdw
+ * Use `mpmul'.
+ *
  * Revision 1.1  1999/12/22 15:51:02  mdw
  * Calculate product of small primes for DSA prime search.
  *
@@ -38,6 +47,8 @@
 /*----- Header files ------------------------------------------------------*/
 
 #include "mp.h"
+#include "mpint.h"
+#include "mpmul.h"
 #include "primetab.h"
 
 /*----- Global variables --------------------------------------------------*/
@@ -58,21 +69,21 @@ mp *primorial = 0;
 
 void primorial_setup(void)
 {
-  mp *p;
-  mp q;
-  mpw qw;
+  mp *p = MP_NEW;
+  mpmul mm = MPMUL_INIT;
   int i;
 
   if (primorial)
     return;
-  mp_build(&q, &qw, &qw + 1);
-  p = MP_ONE;
+
   for (i = 0; i < NPRIME; i++) {
-    qw = primetab[i];
-    p = mp_mul(p, p, &q);
+    p = mp_fromuint(p, primetab[i]);
+    mpmul_add(&mm, p);
   }
-  mp_minimize(p);
-  primorial = p;
+  mp_drop(p);
+  primorial = mpmul_done(&mm);
+  mp_minimize(primorial);
+  primorial->a->n--; /* Permanent allocation */
 }
 
 /*----- That's all, folks -------------------------------------------------*/