The Fermat primality test is a
probabilistic
Probability is the branch of mathematics concerning numerical descriptions of how likely an event is to occur, or how likely it is that a proposition is true. The probability of an event is a number between 0 and 1, where, roughly speaking, ...
test to determine whether a number is a
probable prime
In number theory, a probable prime (PRP) is an integer that satisfies a specific condition that is satisfied by all prime numbers, but which is not satisfied by most composite numbers. Different types of probable primes have different specific con ...
.
Concept
Fermat's little theorem states that if ''p'' is prime and ''a'' is not divisible by ''p'', then
:
If one wants to test whether ''p'' is prime, then we can pick random integers ''a'' not divisible by ''p'' and see whether the equality holds. If the equality does not hold for a value of ''a'', then ''p'' is composite. This congruence is unlikely to hold for a random ''a'' if ''p'' is composite.
Therefore, if the equality does hold for one or more values of ''a'', then we say that ''p'' is
probably prime.
However, note that the above congruence holds trivially for
, because the congruence relation is
compatible with exponentiation. It also holds trivially for
if ''p'' is odd, for the same reason. That is why one usually chooses a random ''a'' in the interval
.
Any ''a'' such that
:
when ''n'' is composite is known as a ''Fermat liar''. In this case ''n'' is called
Fermat pseudoprime
In number theory, the Fermat pseudoprimes make up the most important class of pseudoprimes that come from Fermat's little theorem.
Definition
Fermat's little theorem states that if ''p'' is prime and ''a'' is coprime to ''p'', then ''a'p''� ...
to base ''a''.
If we do pick an ''a'' such that
:
then ''a'' is known as a ''Fermat witness'' for the compositeness of ''n''.
Example
Suppose we wish to determine whether ''n'' = 221 is prime. Randomly pick 1 < ''a'' < 220, say ''a'' = 38. We check the above equality and find that it holds:
:
Either 221 is prime, or 38 is a Fermat liar, so we take another ''a'', say 24:
:
So 221 is composite and 38 was indeed a Fermat liar. Furthermore, 24 is a Fermat witness for the compositeness of 221.
Algorithm
The algorithm can be written as follows:
:Inputs: ''n'': a value to test for primality, ''n''>3; ''k'': a parameter that determines the number of times to test for primality
:Output: ''composite'' if ''n'' is composite, otherwise ''probably prime''
:Repeat ''k'' times:
::Pick ''a'' randomly in the range
, ''n'' − 2::If
, then return ''composite''
:If composite is never returned: return ''probably prime''
The ''a'' values 1 and ''n''-1 are not used as the equality holds for all ''n'' and all odd ''n'' respectively, hence testing them adds no value.
Complexity
Using fast algorithms for
modular exponentiation and multiprecision multiplication, the running time of this algorithm is , where ''k'' is the number of times we test a random ''a'', and ''n'' is the value we want to test for primality; see
Miller–Rabin primality test
The Miller–Rabin primality test or Rabin–Miller primality test is a probabilistic primality test: an algorithm which determines whether a given number is likely to be prime, similar to the Fermat primality test and the Solovay–Strassen pri ...
for details.
Flaw
There are infinitely many
Fermat pseudoprime
In number theory, the Fermat pseudoprimes make up the most important class of pseudoprimes that come from Fermat's little theorem.
Definition
Fermat's little theorem states that if ''p'' is prime and ''a'' is coprime to ''p'', then ''a'p''� ...
s to any given basis ''a>1''.
Even worse, there are infinitely many
Carmichael number
In number theory, a Carmichael number is a composite number n, which in modular arithmetic satisfies the congruence relation:
:b^n\equiv b\pmod
for all integers b. The relation may also be expressed in the form:
:b^\equiv 1\pmod.
for all integers ...
s.
These are numbers
for which
all values of
with
are Fermat liars. For these numbers, repeated application of the Fermat primality test performs the same as a simple random search for factors. While Carmichael numbers are substantially rarer than prime numbers (Erdös' upper bound for the number of Carmichael numbers is lower than the
prime number function n/log(n)) there are enough of them that Fermat's primality test is not often used in the above form. Instead, other more powerful extensions of the Fermat test, such as
Baillie–PSW,
Miller–Rabin, and
Solovay–Strassen are more commonly used.
In general, if
is a composite number that is not a Carmichael number, then at least half of all
:
(i.e.
)
are Fermat witnesses. For proof of this, let
be a Fermat witness and
,
, ...,
be Fermat liars. Then
:
and so all
for
are Fermat witnesses.
Applications
As mentioned above, most applications use a
Miller–Rabin or
Baillie–PSW test for primality. Sometimes a Fermat test (along with some trial division by small primes) is performed first to improve performance.
GMP since version 3.0 uses a base-210 Fermat test after trial division and before running Miller–Rabin tests.
Libgcrypt uses a similar process with base 2 for the Fermat test, but
OpenSSL
OpenSSL is a software library for applications that provide secure communications over computer networks against eavesdropping or need to identify the party at the other end. It is widely used by Internet servers, including the majority of HT ...
does not.
In practice with most big number libraries such as GMP, the Fermat test is not noticeably faster than a Miller–Rabin test, and can be slower for many inputs.
As an exception, OpenPFGW uses only the Fermat test for probable prime testing. The program is typically used with multi-thousand digit inputs with a goal of maximum speed with very large inputs. Another well known program that relies only on the Fermat test is
PGP where it is only used for testing of self-generated large random values (an open source counterpart,
GNU Privacy Guard
GNU Privacy Guard (GnuPG or GPG) is a free-software replacement for Symantec's PGP cryptographic software suite. The software is compliant with RFC 4880, the IETF standards-track specification of OpenPGP. Modern versions of PGP are interoper ...
, uses a Fermat pretest followed by Miller–Rabin tests).
References
*
{{number theoretic algorithms
Primality tests
Modular arithmetic