Open in App
Not now

# Vantieghems Theorem for Primality Test

• Difficulty Level : Medium
• Last Updated : 23 Aug, 2022

Vantieghems Theorem is a necessary and sufficient condition for a number to be prime. It states that for a natural number n to be prime, the product of where , is congruent to
In other words, a number n is prime if and only if.

Examples:

• For n = 3, final product is (21 – 1) * (22 – 1) = 1*3 = 3. 3 is congruent to 3 mod 7. We get 3 mod 7 from expression 3 * (mod (23 – 1)), therefore 3 is prime.
• For n = 5, final product is 1*3*7*15 = 315. 315 is congruent to 5(mod 31), therefore 5 is prime.
• For n = 7, final product is 1*3*7*15*31*63 = 615195. 615195 is congruent to 7(mod 127), therefore 7 is prime.
• For n = 4, final product 1*3*7 = 21. 21 is not congruent to 4(mod 15), therefore 4 is composite.

Another way to state above theorem is, if divides , then n is prime.

## C++

 // C++ code to verify Vantieghem's Theorem #include  using namespace std;   void checkVantieghemsTheorem(int limit) {     long long unsigned prod = 1;     for (long long unsigned n = 2; n < limit; n++) {           // Check if above condition is satisfied         if (((prod - n) % ((1LL << n) - 1)) == 0)             cout << n << " is prime\n";           // product of previous powers of 2         prod *= ((1LL << n) - 1);     } }   // Driver code int main() {     checkVantieghemsTheorem(10);     return 0; }

## Java

 // Java code to verify Vantieghem's Theorem import java.util.*; class GFG {   static void checkVantieghemsTheorem(int limit) {     long prod = 1;     for (long n = 2; n < limit; n++)      {           // Check if above condition is satisfied         if (((prod - n < 0 ? 0 : prod - n) % ((1 << n) - 1)) == 0)             System.out.print(n + " is prime\n");           // product of previous powers of 2         prod *= ((1 << n) - 1);     } }   // Driver code public static void main(String []args) {     checkVantieghemsTheorem(10); } }   // This code is contributed by rutvik_56.

## Python3

 # Python3 code to verify Vantieghem's Theorem def checkVantieghemsTheorem(limit):           prod = 1     for n in range(2, limit):                   # Check if above condition is satisfied         if n == 2:             print(2, "is prime")         if (((prod - n) % ((1 << n) - 1)) == 0):             print(n, "is prime")                       # Product of previous powers of 2         prod *= ((1 << n) - 1)       # Driver code checkVantieghemsTheorem(10)   # This code is contributed by shubhamsingh10

## C#

 // C# code to verify Vantieghem's Theorem using System; class GFG {   static void checkVantieghemsTheorem(int limit)   {     long prod = 1;     for (long n = 2; n < limit; n++)      {         // Check if above condition is satisfied       if (((prod - n < 0 ? 0 : prod - n) % ((1 << (int)n) - 1)) == 0)         Console.Write(n + " is prime\n");         // product of previous powers of 2       prod *= ((1 << (int)n) - 1);     }   }     // Driver code   public static void Main()   {     checkVantieghemsTheorem(10);   } }   // This code is contributed by pratham76.

## Javascript

 

Output:

2 is prime
3 is prime
5 is prime
7 is prime

Time Complexity : O(limit)
Auxiliary Space: O(1)

The above code does not work for values of n higher than 11. It causes overflow in prod evaluation.

My Personal Notes arrow_drop_up
Related Articles