Baillie–PSW primality test
The Baillie-PSW test is a combination of a strong Fermat probable prime test to base 2 and a strong Lucas probable prime test. The Fermat and Lucas test each has its own list of pseudoprimes, that is, composite numbers that pass the primality test. For example, the first ten strong pseudoprimes to base 2 are 2047, 3277, 4033, 4681, 8321, 15841, 29341, 42799, 49141, and 52633 (sequence A001262 in OEIS). The first ten strong Lucas pseudoprimes (with Lucas parameters D, P, and Q chosen as described below) are 5459, 5777, 10877, 16109, 18971, 22499, 24569, 25199, 40309, and 58519 (sequence A217255 in OEIS).
The power of the Baillie-PSW test comes from the fact that these lists of strong Fermat pseudoprimes and strong Lucas pseudoprimes have no known overlap. There is even evidence that the numbers in these lists tend to be different kinds of numbers. For example, pseudoprimes base 2 tend to fall into the residue class 1 (mod m) for many small m, whereas Lucas pseudoprimes tend to fall into the residue class −1 (mod m); see Section 6 of  and Table 2 and Section 5 of . As a result, a number that passes both a strong Fermat and a strong Lucas test is very likely to be prime.
No composite number below 264 (approximately 1.845·1019) passes the Baillie-PSW test. Consequently, this can be considered a deterministic primality test on numbers below that bound. There are also no known composite numbers above that bound that pass the test.
The authors of the test offered $30 for the discovery of a counterexample, that is, a composite number that passed this test. As of 1994[update], the value was raised to $620. As of March, 2013, the prize remains unclaimed.
However, there is a heuristic argument by Pomerance suggesting that there may be infinitely many counterexamples. Moreover, Chen and Greene   have constructed a set S of 1248 primes such that, among the nearly 21248 products of distinct primes in S, there may be about 740 counterexamples.
Let n be the odd positive integer that we wish to test for primality.
- Optionally, perform trial division to check if n is divisible by a small prime number less than some convenient limit.
- Perform a base 2 strong probable prime test. If n is not a strong probable prime base 2, then n is composite; quit.
- Find the first D in the sequence 5, −7, 9, −11, ... for which the Jacobi symbol (D/n) is −1. Set P = 1 and Q = (1 − D) / 4.
- Perform a strong Lucas probable prime test on n using parameters D, P, and Q. If n is not a strong Lucas probable prime, then n is composite. Otherwise, n is almost certainly prime.
- The first step is for efficiency only. The Baillie-PSW test works without this step, but if n has small prime factors, then the quickest way to show that n is composite is to find a factor by trial division.
- The second step is a single application of the Miller-Rabin primality test. There is nothing special about using base 2; other bases might work just as well. However, much work has been done (see above) to verify that the combination of the base 2 strong probable prime test and a strong Lucas test does a good job of distinguishing primes from composites.
- If n is a perfect square, then step 3 will never yield a D with (D/n) = −1; this is not a problem because perfect squares are easy to detect using Newton's method for square roots. If step 3 fails to produce a D quickly, one should check whether n is a perfect square.
- Given n, there are other methods for choosing D, P, and Q; see pages 1401 and 1409 of. What is important is that the Jacobi symbol (D/n) be −1. Bressoud and Wagon (, pp. 266–269) explain why we want the Jacobi symbol to be −1, as well as why one gets more powerful primality tests if Q ≠ ± 1.
- If Q ≠ ±1, there are additional tests that can be performed at almost no extra computational cost. After one has computed the powers of Q and the terms in the Lucas sequences that are used in the strong Lucas probable prime test, these additional primality conditions provide further opportunities to show that n is composite; see Section 6 of.
The danger of relying only on Fermat tests
There is significant overlap among the lists of pseudoprimes to different bases.
Choose a base a. If n is a pseudoprime to base a, then n is likely to be one of those few numbers that is a pseudoprime to many bases.
For example, n = 341 is a pseudoprime to base 2. It follows from Theorem 1 on page 1392 of  that there are 100 values of a (mod 341) for which 341 is a pseudoprime base a. (The first ten such a are 1, 2, 4, 8, 15, 16, 23, 27, 29, and 30). The proportion of such a compared to n is usually much smaller.
Therefore, if n is a pseudoprime to base a, then n is more likely than average to be a pseudoprime to some other base (see page 1020 of ). For example, there are 21853 pseudoprimes to base 2 up to 25·109. This is only about two out of every million odd integers in this range. However (see page 1021 of ):
- 4709 of these 21853 numbers (over 21 percent) are also pseudoprimes to base 3;
- 2522 of these 4709 numbers (over 53 percent) are pseudoprimes to bases 2, 3, and 5;
- 1770 of these 2522 numbers (over 70 percent) are pseudoprimes to bases 2, 3, 5, and 7.
29341 is the smallest pseudoprime to bases 2, 3, 5, and 7. This suggests that probable prime tests to different bases are not independent of each other, so that performing Fermat probable prime tests to more and more bases will give diminishing returns. On the other hand, the calculations up to 264, mentioned above, suggest that Fermat and Lucas probable prime tests are independent (see also page 1400 of ), so that a combination of these types of tests would make a powerful primality test, especially if the strong forms of the tests are used.
There is also overlap among strong pseudoprimes to different bases. For example, 1373653 is the smallest strong pseudoprime to bases 2 and 3, and 3215031751 is the smallest strong pseudoprime to bases 2, 3, 5, and 7. Arnault  gives a 397-digit composite number N that is a strong pseudoprime to all bases less than 307. Because this N is a Carmichael number, N is also a (not necessarily strong) pseudoprime to all bases less than p, where p is the 131-digit smallest prime factor of N. A quick calculation shows that N is not a Lucas probable prime when D, P, and Q are chosen by the method described above, so this number would be correctly determined by the Baillie-PSW test to be composite.
Applications of combined Fermat and Lucas primality tests
The following computer algebra systems and software packages use some version of the Baillie–PSW primality test.
Maple's isprime function , Mathematica's PrimeQ function , PARI/GP's isprime and ispseudoprime functions , and Sage's is_pseudoprime function  all use a combination of a Miller-Rabin (Fermat strong probable prime) test and a Lucas test. Maxima's primep function uses such a test for numbers greater than 341550071728321 .
The BigInteger class in standard versions of Java and in open-source implementations like OpenJDK, has a method called isProbablePrime. This method does one or more Miller-Rabin tests with random bases. If n, the number being tested, has 100 bits or more, this method also does a non-strong Lucas test that checks whether Un+1 is 0 (mod n).   The use of random bases in the Miller-Rabin tests has an advantage and a drawback compared to doing a single base 2 test as specified in the Baillie–PSW test. The advantage is that, with random bases, one can get a bound on the probability that n is composite. The drawback is that, unlike the Baillie–PSW test, one cannot say with certainty that if n is less than some fixed bound such as 264, then n is prime.
In Perl, the Math::Primality and Math::Prime::Util modules have functions to perform the strong Baillie-PSW test as well as separate functions for strong pseudoprime and strong Lucas tests. In Python, the NZMATH library has the strong pseudoprime and Lucas tests, but does not have a combined function.
GNU Multiple Precision Arithmetic Library's mpz_probab_prime_p function uses a Miller-Rabin test, but does not appear to use a Lucas test . Magma's IsProbablePrime and IsProbablyPrime functions use 20 Miller-Rabin tests for numbers > 34·1013, but do not combine them with a Lucas probable prime test .
- Carl Pomerance; John L. Selfridge, Samuel S. Wagstaff, Jr. (July 1980). "The pseudoprimes to 25·109". Mathematics of Computation 35 (151): 1003–1026. doi:10.1090/S0025-5718-1980-0572872-7.
- Robert Baillie; Samuel S. Wagstaff, Jr. (October 1980). "Lucas Pseudoprimes". Mathematics of Computation 35 (152): 1391–1417. doi:10.1090/S0025-5718-1980-0583518-6. MR 583518.
- "The Baillie-PSW Primality Test". Thomas R. Nicely. Retrieved 2013-03-17.
- Guy, R. (1994). “Pseudoprimes. Euler Pseudoprimes. Strong Pseudoprimes.” §A12 in Unsolved Problems in Number Theory. 2nd ed., p. 28, New York: Springer-Verlag. ISBN 0-387-20860-7.
- Pomerance, C. (1984), Are There Counterexamples to the Baillie-PSW Primality Test?
- Baillie-PSW John R. Greene's website.
- Zhuo Chen; John Greene (August 2003). "Some Comments on Baillie-PSW Pseudoprimes". The Fibonacci Quarterly 41 (4): 334–344.
- David Bressoud; Stan Wagon (2000). A Course in Computational Number Theory. New York: Key College Publishing in cooperation with Springer. ISBN 978-1-930190-10-8.
- F. Arnault (August 1995). "Constructing Carmichael Numbers Which Are Strong Pseudoprimes to Several Bases". Journal of Symbolic Computation 20 (2): 151–161. doi:10.1006/jsco.1995.1042.
- isprime - Maple Help documentation at maplesoft.com.
- Some Notes on Internal Implementation-Wolfram Mathematica 9 Documentation documentation at wolfram.com.
- User's Guide to PARI/GP (version 2.5.1) documentation for PARI/GP.
- Sage Reference Manual Release 5.7 documentation for Sage.
- Maxima Manual Ver. 5.28.0 documentation for Maxima.
- FLINT: Fast Library for Number Theory documentation for FLINT 2.3.0.
- BigInteger.java DocJar: Search Open Source Java API.
- BigInteger.java documentation for OpenJDK.
- Math::Primality Perl module with BPSW test
- Math::Prime::Util Perl module with primality tests including BPSW
- Math::Prime::Util::GMP Perl module with primality tests including BPSW, using C+GMP
- NZMATH number theory calculation system in Python
- Prime Testing Algorithm - GNU MP 5.1.1 documentation for GMPLIB.
- Magma Computational Algebra System - Primes and Primality Testing documentation for Magma.
- Nicely, Thomas R., The Baillie-PSW primality test.
- Weisstein, Eric W., "Baillie-PSW Primality Test", MathWorld.