← LibraryCompositeness Tests: Fermat and Miller–RabinEngineering · MathematicsLesson 2/5← PrevNext →
GuidePublished 6 Aug 20264 min readBy Kevin JoginComputational Number TheoryPrimalityFermat TestMiller-Rabin
Skip to the main content

MathematicsPrimality

Compositeness Tests: Fermat and Miller–Rabin

The fast tests that filter almost everything — and the Carmichael numbers that show why the strong version is required.

Executive summary

One modular exponentiation, with the intermediate squarings inspected

Fermat's little theorem gives an immediate test: if an−1 ≢ 1 (mod n) then n is composite. Carmichael numbers defeat it for every coprime base. Miller–Rabin strengthens the test by writing n − 1 = 2sd and inspecting the sequence of squarings, exploiting the fact that a field has only two square roots of 1. At most a quarter of bases can fail to witness a composite.

Learning objectives

  • State Fermat's test and the reason for its failure.
  • Implement the strong probable prime test correctly.
  • State the error bound and how it improves for random inputs.
  • Use verified deterministic base sets for bounded ranges.
  • Explain why Baillie–PSW combines two dissimilar tests.

Section 01The Fermat test and Carmichael numbers

an−1 ≡ 1   (mod n)    for prime n and gcd(a, n) = 1

A composite passing this for a given base is a Fermat pseudoprime to that base. Carmichael numbers pass for every coprime base — 561, 1105 and 1729 are the smallest — and there are infinitely many. The Fermat test alone is therefore not merely weak but systematically defeatable.

A GCD failure is a factor, not an error

If gcd(a, n) > 1 the test is inapplicable, but that GCD is a non-trivial factor of n — a useful outcome for a test that was only meant to detect compositeness. Implementations should report it rather than discard it.

Section 02The strong test

In a field, x2 = 1 forces x = ±1. The strong test checks this at every squaring on the way to an−1.

AlgorithmMiller–Rabin strong probable prime testin: odd n > 2, base a  →  out: composite, or probable prime
  1. Write n − 1 = 2sd with d odd.
  2. Set x ← ad mod n. If x = 1 or x = n − 1, report probable prime for this base.
  3. For r = 1, …, s−1: set x ← x2 mod n.
  4.    If x = n − 1, report probable prime for this base.
  5.    If x = 1, report composite — a non-trivial square root of 1 was found. This is the strengthening over Fermat.
  6. Report composite.
Cost is one modular exponentiation, with the intermediate squarings inspected as they occur — so the strong test is no more expensive than the Fermat test.
≤ 1/4proportion of bases failing to witness a composite
4−kworst-case error after k random bases
No universal pseudoprimesunlike Fermat, no Carmichael analogue exists
Random bases, not fixed ones

The 1/4 bound applies to bases chosen at random. Fixed bases can be defeated by adversarially constructed composites, and such constructions are published. Any implementation used on untrusted input must randomise its bases.

Section 03Deterministic variants

For bounded ranges, exhaustively verified base sets make the test deterministic. These sets are the result of computation, not theory, and are valid only within their stated bound.

Verified deterministic base sets
Bound on nSufficient bases
3 215 031 7512, 3, 5, 7
3 474 749 660 3832, 3, 5, 7, 11, 13
341 550 071 728 321the first 9 primes
3 317 044 064 679 887 385 961 981the first 13 primes
Do not extrapolate a base set

These sets are proved only up to their bounds. Applying a set beyond its range converts a deterministic test into an unsound one with no error bound at all. Above 64 bits, use random bases and report a probability, or use a proving algorithm.

Section 04Baillie–PSW

The Baillie–PSW test combines a strong probable prime test to base 2 with a strong Lucas test using parameters chosen by a Jacobi symbol condition. The two tests fail in structurally different ways, so a composite passing both would need to be exceptional in two unrelated respects.

No counterexample is known

Despite extensive search, no composite has been found that passes Baillie–PSW, though heuristic arguments suggest such numbers exist. It is not a proof of primality, but as a practical filter it is stronger than any comparable number of Miller–Rabin rounds and is the default in several major libraries.

ReferenceFrequently asked questions

Why is the error probability better in practice than 4^(-k)?

Because the 1/4 bound is attained only by rare, specially structured composites. For a random odd candidate of a given size, the probability that it is composite yet passes even a single round is far smaller, which is why candidate generation and adversarial testing require different round counts.

Should the base 1 or n-1 be used?

No — both pass trivially for every n and carry no information. Bases should be drawn uniformly from the range 2 to n−2.

Does the strong test detect all Carmichael numbers?

Yes, for most bases. Carmichael numbers are Fermat pseudoprimes to all coprime bases, but they are not strong pseudoprimes to all bases — the intermediate square root condition catches them, which is precisely why the strong test superseded Fermat's.

NavigateContinue in this stream

Curated next steps from this page. The site also surfaces algorithmically related reading below.

ProvenanceSources and further reading

This page is an original KEVOS explanatory article. It presents the underlying mathematics — definitions, algorithms, complexity results and selection criteria — in KEVOS editorial voice. No text is reproduced from any copyrighted source. Where numerical tables are relevant, KEVOS links to live authoritative databases rather than republishing static values.

Page ID
KV-MATH-0045
Taxonomy
ENG-MATH — Engineering / Mathematics
Collection
COL-CANT-001
Topic stream
CANT-PRIMALITY
Version
1.1.0 / content 2026.08
Last reviewed
2026-08-06

Continue learning

Primality Testing versus FactoringGuide · MathematicsNEXT LESSON →Classical Primality Proofs: Pocklington and LehmerGuide · MathematicsThe Jacobi Sum Primality TestGuide · MathematicsElliptic Curve Primality ProvingGuide · Mathematics