Karim Belabas on Thu, 25 Oct 2012 23:07:38 +0200


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

Re: forprime in 32bit is 50x slower if p>2^32


* Bill Allombert [2012-10-25 21:02]:
> On Thu, Oct 25, 2012 at 01:13:39PM -0400, Charles Greathouse wrote:
> > > Threshold between an efficient sieve and expensive unextprime()...
> > 
> > No, even worse: it has to use nextprime(). This means it loops through
> > the good congruence classes mod 210 and runs BPSW_psp until it finds a
> > hit...
> 
> Maybe we could at least replace 210 by something larger.

I doubt it would help unless you make is *much* larger. BPSW_psp() starts by
trial dividing by all primes <= 101, so all composites with small factors are
quickly detected already. I'd expect most of the computing time (say 50% ?) to
be "wasted" certifying actual primes.

(22:35) gp > B = 2*3*5*7*11*13*17*19*23*29*31*37;

(22:36) gp > forstep(n = 1, B * 10^6, B, isprime(n))
time = 3,597 ms.
(22:36) gp > forstep(n = 2, B * 10^6, B, isprime(n))
time = 188 ms.
(22:36) gp > forstep(n = 3, B * 10^6, B, isprime(n))
time = 665 ms.
(22:37) gp > forstep(n = 11, B * 10^6, B, isprime(n))
time = 644 ms.
(22:37) gp > forstep(n = 37, B * 10^6, B, isprime(n))
time = 641 ms.

Odd composites with obvious small factors are treated in less than 20% of the
time compared to genuine candidates = 1 (mod B) [ about 16% of them are primes
in this range ]. Replacing 210 by 210 * B (for some B coprime with 210) is only
going to reduce the number of treated integers by a factor of B / \phi(B)
only; and you're only removing the fast ones...

Cheers,


    K.B.
-- 
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1          Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux1.fr/~belabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux1.fr/  [PARI/GP]
`