| Karim Belabas on Sat, 28 Sep 2013 18:54:44 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: Fermat pseudoprime test |
* Firas Kraiem [2013-09-28 18:37]:
> On 9/28/13 6:23 PM, Karim Belabas wrote:
> >I am not sure I understand. Are you complaining that a naive Fermat test
> >Mod(2,N)^(N-1) == 1 is about twice faster than ispseudoprime() ?
>
> If I understand correctly, Shyam is wondering why a naive Fermat
> test is *slower* than ispseudoprime(), at least on some values of N.
[...]
> (16:50) gp > n = random(10^1000);
> (18:29) gp > n%2
> 1
> (18:29) gp > Mod(2,n)^(n-1) == Mod(1,n)
> 0
> (18:29) gp > ##
> *** last result computed in 40 ms.
> (18:29) gp > ispseudoprime(n)
> 0
> (18:29) gp > ##
> *** last result computed in 0 ms.
OK, that's easily explained: ispseudoprime() performs
* a test for prime divisors less that 101: very quick (2 divisions by a
1-word ulong followed by a few gcd on ulongs) and eliminates most
composites already
* a base-2 Rabin-Miller test: slightly faster than Fermat since you may
save a few squarings at the end.
* an "expensive" Lucas test, but composites almost never reach that point.
If you want Fermat to beat ispseudoprime(), you have to try it on primes !
(18:49) gp > p = randomprime(10^1000);
(18:49) gp > ispseudoprime(p)
time = 96 ms.
%2 = 1
(18:49) gp > Mod(2,p)^(p-1) == 1
time = 40 ms.
%3 = 1
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/~kbelabas/
F-33405 Talence (France) http://pari.math.u-bordeaux1.fr/ [PARI/GP]
`