# Check if a number is Primorial Prime or not

Last Updated : 25 Aug, 2022

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

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 false` `    ``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 false ` `    ``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

 `

## Javascript

 ``

Output:

`YES`

Time Complexity: O(n + MAX3/2)

Auxiliary Space: O(MAX)

Previous
Next