# Vantieghems Theorem for Primality Test

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;  }

## 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

Output:

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


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 Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : SHUBHAMSINGH10