Bill Allombert on Fri, 02 Sep 2005 12:23:50 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

better isprime cross-over test


Hello PARI-dev,

isprime include a mechanism to choose between the p-1 test and APRCL
test. However it does not take into account the fact that the p-1 test 
only need p-1 to be factored up to sqrt(p-1).

This patch changes this, which should make the p-1 test used far more
often.

One example where it make a difference: isprime(2^127-1) 

Cheers,
Bill.

Index: pari/src/basemath/arith1.c
===================================================================
--- pari.orig/src/basemath/arith1.c	2005-08-30 16:18:31.000000000 +0200
+++ pari/src/basemath/arith1.c	2005-09-02 11:25:26.000000000 +0200
@@ -1973,12 +1973,14 @@
 {
   pari_sp av = avma;
   long l, res;
-  GEN F, p;
+  GEN F, p, e;
 
   if (BSW_isprime_small(x)) return 1;
-  F = (GEN)auxdecomp(subis(x,1), 0)[1];
-  l = lg(F); p = gel(F,l-1);
-  if (BSW_psp(p))
+  F = auxdecomp(subis(x,1), 0);
+  l = lg(gel(F,1))-1; p = gcoeff(F,l,1); e = gcoeff(F,l,2); F=gel(F,1);
+  if (cmpii(powgi(p, shifti(e,1)), x)<0)
+    res = isprimeSelfridge(mkvec2(x,vecslice(F,1,l-1))); /* half-smooth */
+  else if (BSW_psp(p))
     res = isprimeSelfridge(mkvec2(x,F)); /* smooth */
   else
     res = isprimeAPRCL(x);