Given a number n, check if it is prime or not. We have introduced and discussed School method for primality testing in Set 1.
Primality Test | Set 1 (Introduction and School Method)
In this post, Fermat’s method is discussed. This method is a probabilistic method and is based on below Fermat’s Little Theorem.
Fermat's Little Theorem: If n is a prime number, then for every a, 1 < a < n-1, an-1 ≡ 1 (mod n) OR an-1 % n = 1 Example: Since 5 is prime, 24 ≡ 1 (mod 5) [or 24%5 = 1], 34 ≡ 1 (mod 5) and 44 ≡ 1 (mod 5) Since 7 is prime, 26 ≡ 1 (mod 7), 36 ≡ 1 (mod 7), 46 ≡ 1 (mod 7) 56 ≡ 1 (mod 7) and 66 ≡ 1 (mod 7) Refer this for different proofs.
If a given number is prime, then this method always returns true. If given number is composite (or non-prime), then it may return true or false, but the probability of producing incorrect result for composite is low and can be reduced by doing more iterations.
Below is algorithm:
// Higher value of k indicates probability of correct // results for composite inputs become higher. For prime // inputs, result is always correct 1) Repeat following k times: a) Pick a randomly in the range [2, n - 2] b) If gcd(a, n) ≠ 1, then return false c) If an-1 ≢ 1 (mod n), then return false 2) Return true [probably prime].
Below is the implementation of above algorithm. The code uses power function from Modular Exponentiation
Time complexity of this solution is O(k Log n). Note that power function takes O(Log n) time.
Note that the above method may fail even if we increase number of iterations (higher k). There exist some composite numbers with the property that for every a < n, gcd(a, n) = 1 and an-1 ≡ 1 (mod n). Such numbers are called Carmichael numbers. Fermat’s primality test is often used if a rapid method is needed for filtering, for example in key generation phase of the RSA public key cryptographic algorithm.
We will soon be discussing more methods for Primality Testing.
This article is contributed by Ajay. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Primality Test | Set 1 (Introduction and School Method)
- Primality Test | Set 3 (Miller–Rabin)
- Primality Test | Set 5(Using Lucas-Lehmer Series)
- Primality Test | Set 4 (Solovay-Strassen)
- AKS Primality Test
- Vantieghems Theorem for Primality Test
- Implementation of Wilson Primality test
- Primality test for the sum of digits at odd places of a number
- Lucas Primality Test
- Compute nCr % p | Set 3 (Using Fermat Little Theorem)
- Fermat's Factorization method for large numbers
- Fermat's Factorization Method
- Fermat's little theorem
- Fermat's Last Theorem
- Check if a number is Fermat Pseudoprime
- Program to find first N Fermat Numbers
- Paytm Interview Experience | Set 7 (Written Test Hyderabad)
- MAQ Software Interview Experience | Set 12 (Written Test)
- Kruskal Wallis Test
- Friedman Test