Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Special pages
Niidae Wiki
Search
Search
Appearance
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
Fermat primality test
Page
Discussion
English
Read
Edit
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
View history
General
What links here
Related changes
Page information
Appearance
move to sidebar
hide
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Probabilistic primality test}} {{for|the test for determining whether a Fermat number is prime|Pépin's test}} The '''Fermat primality test''' is a [[randomized algorithm|probabilistic]] test to determine whether a number is a [[probable prime]]. ==Concept== [[Fermat's little theorem]] states that if ''p'' is prime and ''a'' is not divisible by ''p'', then :<math>a^{p-1} \equiv 1 \pmod{p}.</math> If one wants to test whether ''p'' is prime, then we can pick random integers ''a'' not divisible by ''p'' and see whether the congruence holds. If it 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.<ref name="PSW">{{cite journal |author1 = Carl Pomerance |author-link1 = Carl Pomerance |author2 = John L. Selfridge |author-link2 = John L. Selfridge |author3 = Samuel S. Wagstaff, Jr. |author-link3 = Samuel S. Wagstaff, Jr. |title=The pseudoprimes to 25·10<sup>9</sup> |journal=Mathematics of Computation |date=July 1980 |volume=35 |issue=151 |pages=1003–1026 |url=//math.dartmouth.edu/~carlp/PDF/paper25.pdf |jstor=2006210 |doi=10.1090/S0025-5718-1980-0572872-7 |doi-access=free }}</ref> Therefore, if the equality does hold for one or more values of ''a'', then we say that ''p'' is [[probable prime|probably prime]]. However, note that the above congruence holds trivially for <math>a \equiv 1 \pmod{p}</math>, because the congruence relation is [[Modular arithmetic#Basic properties|compatible with exponentiation]]. It also holds trivially for <math>a \equiv -1 \pmod{p}</math> if ''p'' is odd, for the same reason. That is why one usually chooses a random ''a'' in the interval <math>1 < a < p - 1</math>. Any ''a'' such that :<math>a^{n-1} \equiv 1 \pmod{n}</math> when ''n'' is composite is known as a ''Fermat liar''. In this case ''n'' is called [[Fermat pseudoprime]] to base ''a''. If we do pick an ''a'' such that :<math>a^{n-1} \not\equiv 1 \pmod{n}</math> 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 congruence and find that it holds: :<math>a^{n-1} = 38^{220} \equiv 1 \pmod{221}.</math> Either 221 is prime, or 38 is a Fermat liar, so we take another ''a'', say 24: :<math>a^{n-1} = 24^{220} \equiv 81 \not\equiv 1 \pmod{221}.</math> 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 [2, ''n'' − 2] ::If <math>a^{n-1}\not\equiv1 \pmod n</math>, 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 {{math|[[Big O notation|O]](''k'' log<sup>2</sup>''n'' log log ''n'') {{=}} [[Big O notation#Extensions to the Bachmann–Landau notations|Õ]](''k'' log<sup>2</sup>''n'')}}, 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#Complexity|Miller–Rabin primality test]] for details. ==Flaw== There are infinitely many [[Fermat pseudoprime]]s to any given basis ''a'' > 1.{{r|PSW|p=Theorem 1}} Even worse, there are infinitely many [[Carmichael number]]s.<ref name="Alford1994">{{cite journal |last1=Alford |first1=W. R. |author-link=W. R. (Red) Alford |last2=Granville |first2=Andrew |author-link2=Andrew Granville |last3=Pomerance |first3=Carl |author-link3=Carl Pomerance |year=1994 |title=There are Infinitely Many Carmichael Numbers |journal=[[Annals of Mathematics]] |doi=10.2307/2118576 |volume=140 |issue=3 |pages=703–722 |url=http://www.math.dartmouth.edu/~carlp/PDF/paper95.pdf |jstor=2118576 }}</ref> These are numbers <math>n</math> for which <em>all</em> values of <math>a</math> with <math>\operatorname{gcd}(a, n) = 1</math> 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<ref> {{cite journal |author = Paul Erdős |date=1956 |title=On pseudoprimes and Carmichael numbers |journal=Publ. Math. Debrecen |volume=4 |pages=201–206|author-link=Paul Erdős|mr=0079031 }}</ref> is lower than the [[Prime number theorem|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 primality test|Baillie–PSW]], [[Miller–Rabin primality test|Miller–Rabin]], and [[Solovay–Strassen primality test|Solovay–Strassen]] are more commonly used. In general, if <math>n</math> is a composite number that is not a Carmichael number, then at least half of all :<math>a\in(\mathbb{Z}/n\mathbb{Z})^*</math> (i.e. <math>\operatorname{gcd}(a,n)=1</math>) are Fermat witnesses. For proof of this, let <math>a</math> be a Fermat witness and <math>a_1</math>, <math>a_2</math>, ..., <math>a_s</math> be Fermat liars. Then :<math>(a\cdot a_i)^{n-1} \equiv a^{n-1}\cdot a_i^{n-1} \equiv a^{n-1} \not\equiv 1\pmod{n}</math> and so all <math>a \cdot a_i</math> for <math>i = 1, 2, ..., s</math> are Fermat witnesses. ==Applications== As mentioned above, most applications use a [[Miller–Rabin primality test|Miller–Rabin]] or [[Baillie–PSW primality test|Baillie–PSW]] test for primality. Sometimes a Fermat test (along with some trial division by small primes) is performed first to improve performance. [[GNU Multiple Precision Arithmetic Library|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]] 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.<ref>{{citation|author=Joe Hurd|date=2003|title=Verification of the Miller–Rabin Probabilistic Primality Test|page=2|citeseerx=10.1.1.105.3196}}</ref> 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 [[Pretty Good Privacy|PGP]] where it is only used for testing of self-generated large random values (an open source counterpart, [[GNU Privacy Guard]], uses a Fermat pretest followed by Miller–Rabin tests). ==References== {{reflist}} * {{cite book |author=[[Thomas H. Cormen]], [[Charles E. Leiserson]], [[Ronald L. Rivest]], [[Clifford Stein]] |title=Introduction to Algorithms |edition=Second |publisher=MIT Press; McGraw-Hill |year=2001 |isbn=0-262-03293-7 |page=889–890 |chapter=Section 31.8: Primality testing|title-link=Introduction to Algorithms }} {{Pierre de Fermat}} {{number theoretic algorithms}} [[Category:Primality tests]] [[Category:Modular arithmetic]]
Summary:
Please note that all contributions to Niidae Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Encyclopedia:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Templates used on this page:
Template:Citation
(
edit
)
Template:Cite book
(
edit
)
Template:Cite journal
(
edit
)
Template:For
(
edit
)
Template:Math
(
edit
)
Template:Number theoretic algorithms
(
edit
)
Template:Pierre de Fermat
(
edit
)
Template:R
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)
Search
Search
Editing
Fermat primality test
Add topic