# Check if a number is Primorial Prime or not

Given a positive number N, the task is to check if N is a primorial prime number or not. Print ‘YES’ if N is a primorial prime number otherwise print ‘NO.

Primorial Prime: In Mathematics, A Primorial prime is a prime number of the form pn# + 1 or pn# – 1 , where pn# is the primorial of pn i.e the product of first n prime numbers.

Examples:

```Input : N = 5
Output : YES
5 is Primorial prime of the form pn - 1
for n=2, Primorial is 2*3 = 6
and 6-1 =5.

Input : N = 31
Output : YES
31 is Primorial prime of the form pn + 1
for n=3, Primorial is 2*3*5 = 30
and 30+1 = 31.
```

The First few Primorial primes are:

2, 3, 5, 7, 29, 31, 211, 2309, 2311, 30029

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Prerequisite:

Approach:

1. Generate all prime number in the range using Sieve of Eratosthenes.
2. Check if n is prime or not, If n is not prime Then print No
3. Else, starting from first prime (i.e 2 ) start multiplying next prime number and keep checking if product + 1 = n or product – 1 = n or not
4. If either product+1=n or product-1=n, then n is a Primorial Prime Otherwise not.

Below is the implementation of above approach:

## C++

 `// CPP program to check Primorial Prime ` ` `  `#include ` `using` `namespace` `std; ` ` `  `#define MAX 10000 ` ` `  `vector<``int``> arr; ` ` `  `bool` `prime[MAX]; ` ` `  `// Function to generate prime numbers ` `void` `SieveOfEratosthenes() ` `{ ` `    ``// Create a boolean array "prime[0..n]" and initialize ` `    ``// make all entries of boolean array 'prime' ` `    ``// as true. A value in prime[i] will ` `    ``// finally be false if i is Not a prime, else true. ` ` `  `    ``memset``(prime, ``true``, ``sizeof``(prime)); ` ` `  `    ``for` `(``int` `p = 2; p * p < MAX; p++) { ` `        ``// If prime[p] is not changed, then it is a prime ` ` `  `        ``if` `(prime[p] == ``true``) { ` ` `  `            ``// Update all multiples of p ` `            ``for` `(``int` `i = p * 2; i < MAX; i += p) ` `                ``prime[i] = ``false``; ` `        ``} ` `    ``} ` ` `  `    ``// store all prime numbers ` `    ``// to vector 'arr' ` `    ``for` `(``int` `p = 2; p < MAX; p++) ` `        ``if` `(prime[p]) ` `            ``arr.push_back(p); ` `} ` ` `  `// Function to check the number for Primorial prime ` `bool` `isPrimorialPrime(``long` `n) ` `{ ` `    ``// If n is not prime Number ` `    ``// return flase ` `    ``if` `(!prime[n]) ` `        ``return` `false``; ` ` `  `    ``long` `long` `product = 1; ` `    ``int` `i = 0; ` ` `  `    ``while` `(product < n) { ` ` `  `        ``// Multiply next prime number ` `        ``// and check if product + 1 = n or Product-1 =n ` `        ``// holds or not ` `        ``product = product * arr[i]; ` ` `  `        ``if` `(product + 1 == n || product - 1 == n) ` `            ``return` `true``; ` ` `  `        ``i++; ` `    ``} ` ` `  `    ``return` `false``; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``SieveOfEratosthenes(); ` ` `  `    ``long` `n = 31; ` ` `  `    ``// Check if n is Primorial Prime ` `    ``if` `(isPrimorialPrime(n)) ` `        ``cout << ``"YES\n"``; ` `    ``else` `        ``cout << ``"NO\n"``; ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to check Primorial prime ` ` `  `import` `java.util.*; ` ` `  `class` `GFG { ` ` `  `    ``static` `final` `int` `MAX = ``1000000``; ` `    ``static` `Vector arr = ``new` `Vector(); ` `    ``static` `boolean``[] prime = ``new` `boolean``[MAX]; ` ` `  `    ``// Function to get the prime numbers ` `    ``static` `void` `SieveOfEratosthenes() ` `    ``{ ` ` `  `        ``// make all entries of boolean array 'prime' ` `        ``// as true. A value in prime[i] will ` `        ``// finally be false if i is Not a prime, else true. ` ` `  `        ``for` `(``int` `i = ``0``; i < MAX; i++) ` `            ``prime[i] = ``true``; ` ` `  `        ``for` `(``int` `p = ``2``; p * p < MAX; p++) { ` ` `  `            ``// If prime[p] is not changed, then it is a prime ` `            ``if` `(prime[p] == ``true``) { ` ` `  `                ``// Update all multiples of p ` `                ``for` `(``int` `i = p * ``2``; i < MAX; i += p) ` `                    ``prime[i] = ``false``; ` `            ``} ` `        ``} ` ` `  `        ``// store all prime numbers ` `        ``// to vector 'arr' ` `        ``for` `(``int` `p = ``2``; p < MAX; p++) ` `            ``if` `(prime[p]) ` `                ``arr.add(p); ` `    ``} ` ` `  `    ``// Function to check the number for Primorial prime ` `    ``static` `boolean` `isPrimorialPrime(``int` `n) ` `    ``{ ` `        ``// If n is not prime ` `        ``// Then return false ` `        ``if` `(!prime[n]) ` `            ``return` `false``; ` ` `  `        ``long` `product = ``1``; ` `        ``int` `i = ``0``; ` `        ``while` `(product < n) { ` ` `  `            ``// Multiply next prime number ` `            ``// and check if product + 1 = n or product -1=n ` `            ``// holds or not ` `            ``product = product * arr.get(i); ` ` `  `            ``if` `(product + ``1` `== n || product - ``1` `== n) ` `                ``return` `true``; ` ` `  `            ``i++; ` `        ``} ` ` `  `        ``return` `false``; ` `    ``} ` ` `  `    ``// Driver Code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``SieveOfEratosthenes(); ` ` `  `        ``int` `n = ``31``; ` ` `  `        ``if` `(isPrimorialPrime(n)) ` `            ``System.out.println(``"YES"``); ` `        ``else` `            ``System.out.println(``"NO"``); ` `    ``} ` `} `

## Python 3

 `# Python3 Program to check Primorial Prime  ` ` `  `# from math lib import sqrt method ` `from` `math ``import` `sqrt ` ` `  `MAX` `=` `100000` ` `  `# Create a boolean array "prime[0..n]"  ` `# and initialize make all entries of  ` `# boolean array 'prime' as true.  ` `# A value in prime[i] will finally be  ` `# false if i is Not a prime, else true.  ` `prime ``=` `[``True``] ``*` `MAX` ` `  `arr ``=` `[] ` ` `  `# Utility function to generate ` `# prime numbers  ` `def` `SieveOfEratosthenes() : ` ` `  `    ``for` `p ``in` `range``(``2``, ``int``(sqrt(``MAX``)) ``+` `1``) : ` ` `  `        ``# If prime[p] is not changed,  ` `        ``# then it is a prime  ` `        ``if` `prime[p] ``=``=` `True` `: ` ` `  `            ``# Update all multiples of p  ` `            ``for` `i ``in` `range``(p ``*` `2` `, ``MAX``, p) : ` `                ``prime[i] ``=` `False` ` `  `    ``# store all prime numbers  ` `    ``# to list 'arr'  ` `    ``for` `p ``in` `range``(``2``, ``MAX``) : ` ` `  `        ``if` `prime[p] : ` `            ``arr.append(p) ` `     `  `# Function to check the number  ` `# for Primorial prime  ` `def` `isPrimorialPrime(n) : ` ` `  `    ``# If n is not prime Number  ` `    ``# return flase  ` `    ``if` `not` `prime[n] : ` `        ``return` `False` ` `  `    ``product, i ``=` `1``, ``0` ` `  `    ``# Multiply next prime number  ` `    ``# and check if product + 1 = n  ` `    ``# or Product-1 = n holds or not  ` `    ``while` `product < n : ` ` `  `        ``product ``*``=` `arr[i] ` ` `  `        ``if` `product ``+` `1` `=``=` `n ``or` `product ``-` `1` `=``=` `n : ` `            ``return` `True` ` `  `        ``i ``+``=` `1` ` `  `    ``return` `False` ` `  `# Driver code ` `if` `__name__ ``=``=` `"__main__"` `: ` `     `  `    ``SieveOfEratosthenes() ` `     `  `    ``n ``=` `31` ` `  `    ``# Check if n is Primorial Prime  ` `    ``if` `(isPrimorialPrime(n)) : ` `        ``print``(``"YES"``)  ` `    ``else` `: ` `        ``print``(``"NO"``)  ` `     `  `# This code is contributed by ANKITRAI1 `

## C#

 `// c# program to check Primorial prime  ` `using` `System; ` `using` `System.Collections.Generic; ` ` `  `public` `class` `GFG ` `{ ` ` `  `    ``public` `const` `int` `MAX = 1000000; ` `    ``public` `static` `List<``int``> arr = ``new` `List<``int``>(); ` `    ``public` `static` `bool``[] prime = ``new` `bool``[MAX]; ` ` `  `    ``// Function to get the prime numbers  ` `    ``public` `static` `void` `SieveOfEratosthenes() ` `    ``{ ` ` `  `        ``// make all entries of boolean array 'prime'  ` `        ``// as true. A value in prime[i] will  ` `        ``// finally be false if i is Not a prime, else true.  ` ` `  `        ``for` `(``int` `i = 0; i < MAX; i++) ` `        ``{ ` `            ``prime[i] = ``true``; ` `        ``} ` ` `  `        ``for` `(``int` `p = 2; p * p < MAX; p++) ` `        ``{ ` ` `  `            ``// If prime[p] is not changed, then it is a prime  ` `            ``if` `(prime[p] == ``true``) ` `            ``{ ` ` `  `                ``// Update all multiples of p  ` `                ``for` `(``int` `i = p * 2; i < MAX; i += p) ` `                ``{ ` `                    ``prime[i] = ``false``; ` `                ``} ` `            ``} ` `        ``} ` ` `  `        ``// store all prime numbers  ` `        ``// to vector 'arr'  ` `        ``for` `(``int` `p = 2; p < MAX; p++) ` `        ``{ ` `            ``if` `(prime[p]) ` `            ``{ ` `                ``arr.Add(p); ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``// Function to check the number for Primorial prime  ` `    ``public` `static` `bool` `isPrimorialPrime(``int` `n) ` `    ``{ ` `        ``// If n is not prime  ` `        ``// Then return false  ` `        ``if` `(!prime[n]) ` `        ``{ ` `            ``return` `false``; ` `        ``} ` ` `  `        ``long` `product = 1; ` `        ``int` `i = 0; ` `        ``while` `(product < n) ` `        ``{ ` ` `  `            ``// Multiply next prime number  ` `            ``// and check if product + 1 = n or product -1=n  ` `            ``// holds or not  ` `            ``product = product * arr[i]; ` ` `  `            ``if` `(product + 1 == n || product - 1 == n) ` `            ``{ ` `                ``return` `true``; ` `            ``} ` ` `  `            ``i++; ` `        ``} ` ` `  `        ``return` `false``; ` `    ``} ` ` `  `    ``// Driver Code  ` `    ``public` `static` `void` `Main(``string``[] args) ` `    ``{ ` `        ``SieveOfEratosthenes(); ` ` `  `        ``int` `n = 31; ` ` `  `        ``if` `(isPrimorialPrime(n)) ` `        ``{ ` `            ``Console.WriteLine(``"YES"``); ` `        ``} ` `        ``else` `        ``{ ` `            ``Console.WriteLine(``"NO"``); ` `        ``} ` `    ``} ` `} ` ` `  `// This code is contributed by Shrikant13 `

## PHP

 `

Output:

```YES
```

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.

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.