Euler pseudoprime

In arithmetic, an odd composite integer n is called an Euler pseudoprime to base a, if a and n are coprime, and


 * $$a^{(n-1)/2} \equiv \pm 1\pmod{n}$$

(where mod refers to the modulo operation).

The motivation for this definition is the fact that all prime numbers p satisfy the above equation which can be deduced from Fermat's little theorem. Fermat's theorem asserts that if p is prime, and coprime to a, then ap&minus;1 ≡ 1 (mod p). Suppose that p>2 is prime, then p can be expressed as 2q + 1 where q is an integer. Thus, a(2q+1) &minus; 1 ≡ 1 (mod p), which means that a2q &minus; 1 ≡ 0 (mod p). This can be factored as (aq &minus; 1)(aq + 1) ≡ 0 (mod p), which is equivalent to a(p&minus;1)/2 ≡ ±1 (mod p).

The equation can be tested rather quickly, which can be used for probabilistic primality testing. These tests are twice as strong as tests based on Fermat's little theorem.

Every Euler pseudoprime is also a Fermat pseudoprime. It is not possible to produce a definite test of primality based on whether a number is an Euler pseudoprime because there exist absolute Euler pseudoprimes, numbers which are Euler pseudoprimes to every base relatively prime to themselves. The absolute Euler pseudoprimes are a subset of the absolute Fermat pseudoprimes, or Carmichael numbers, and the smallest absolute Euler pseudoprime is 1729 = 7&times;13&times;19.

Relation to Euler–Jacobi pseudoprimes
The slightly stronger condition that
 * $$ a^{(n-1)/2} \equiv \left(\frac{a}{n}\right) \pmod n$$

where n is an odd composite, the greatest common divisor of a and n equals 1, and (a/n) is the Jacobi symbol, is the more common definition of an Euler pseudoprime. See, for example, page 115 of the book by Koblitz listed below, page 90 of the book by Riesel, or page 1003 of. A discussion of numbers of this form can be found at Euler–Jacobi pseudoprime. There are no absolute Euler–Jacobi pseudoprimes.

A strong probable prime test is even stronger than the Euler-Jacobi test but takes the same computational effort. Because of this advantage over the Euler-Jacobi test, prime-testing software is often based on the strong test.

Implementation in Lua
function EulerTest(k) a = 2 if k == 1 then return false elseif k == 2 then return true else m = modPow(a,(k-1)/2,k) if (m == 1) or (m == k-1) then return true else return false end end end