GFG App
Open App
Browser
Continue

Check whether X can be represented in the form of (2n – 1) / 3

Given an integer X, the task is to check whether X can be represented in the form of X = (2n – 1) / 3 for some value of n, Where it is necessary for X to be prime.

Examples:

Input: X = 5
Output: Yes
Explanation: X is a prime number and (24 – 1) / 3 = (16 – 1) / 3 = 15 / 3 = 5. So, it is valid.

Input: X = 2
Output: No

Approach: This can be solved with the following idea:

Simplifying, The equation given: X = (2n – 1) / 3

• 3X = 2n – 1
• 3X + 1 = 2n
• 2n = 3X + 1

Taking log2 Both the side of the equation, we get

• log2(2n) = log2(3X + 1)
• n = log2(3X + 1).

Therefore, if X is prime and after solving equation n is also prime, then it is valid

Steps involved in the implementation  of code:

• Input a number X.
• Check whether the number is prime or not. If it is not prime then for sure It is not valid.
• Compute the logarithm of 3X+1  and store it in a variable n
• Now we will check if n is a prime number or not.
• If n is a  prime number then X is valid else it is not valid.

Below is the implementation of the above approach:

C++

 // C++ code for the above approach #include #include using namespace std;   // Function to check whether the // number is prime or not bool isPrime(int n) {       if (n == 2)         return false;     int l = sqrt(n);     for (int i = 3; i <= l; i += 2) {         if (n % i == 0) {             return false;         }     }     return true; }   // Function to check whether the number // obtained is proper integer or not bool isInteger(float num) {       // n will store integer value of num     float n = floor(num);       if (num > n) {         return false;     }     return true; }   // Function to check whether // the number is valid or not bool isValid(int X) {       if (isPrime(X) == false) {         return false;     }     float n = log2(3 * X + 1);     if (isInteger(n) == false) {         return false;     }       return isPrime((int)n); }   // Driver code int main() {     int X = 5;       // Function call     if (isValid(X)) {         cout << "Yes" << endl;     }     else {         cout << "No" << endl;     } }

Java

 // Java code for the above approach   import java.io.*;   class GFG {     // Function to check whether the number is prime or not   static boolean isPrime(int n)   {       if (n == 2)       return false;     int l = (int)Math.sqrt(n);     for (int i = 3; i <= l; i += 2) {       if (n % i == 0) {         return false;       }     }     return true;   }     // Function to check whether the number obtained is   // proper integer or not   static boolean isInteger(float num)   {       // n will store integer value of num     float n = (float)Math.floor(num);       if (num > n) {       return false;     }     return true;   }     // Function to check whether the number is valid or not   static boolean isValid(int X)   {       if (isPrime(X) == false) {       return false;     }     float n       = (float)(Math.log(3 * X + 1) / Math.log(2));     if (isInteger(n) == false) {       return false;     }       return isPrime((int)n);   }     public static void main(String[] args)   {     int X = 5;       // Function call     if (isValid(X)) {       System.out.println("Yes");     }     else {       System.out.println("No");     }   } }   // This code is contributed by lokesh.

Python3

 import math   # Function to check whether the # number is prime or not def isPrime(n):     if n == 2:         return False     l = int(math.sqrt(n))     for i in range(3, l+1, 2):         if n % i == 0:             return False     return True   # Function to check whether the number # obtained is proper integer or not def isInteger(num):     # n will store integer value of num     n = math.floor(num)     if num > n:         return False     return True   # Function to check whether # the number is valid or not def isValid(X):     if isPrime(X) == False:         return False     n = math.log2(3 * X + 1)     if isInteger(n) == False:         return False     return isPrime(int(n))   # Driver code X = 5   # Function call if isValid(X):     print("Yes") else:     print("No")

C#

 // C# code for the above approach   using System;   public class GFG {     // Function to check whether the     // number is prime or not     static bool isPrime(int n)     {         if (n == 2)             return false;         int l = (int)Math.Sqrt(n);         for (int i = 3; i <= l; i += 2)         {             if (n % i == 0)             {                 return false;             }         }         return true;     }       // Function to check whether the number     // obtained is proper integer or not     static bool isInteger(float num)     {         // n will store integer value of num         float n = (float)Math.Floor(num);           if (num > n)         {             return false;         }         return true;     }       // Function to check whether     // the number is valid or not     static bool isValid(int X)     {         if (isPrime(X) == false)         {             return false;         }         float n = (float)Math.Log(3 * X + 1, 2);         if (isInteger(n) == false)         {             return false;         }           return isPrime((int)n);     }       // Driver code     static void Main()     {         int X = 5;           // Function call         if (isValid(X))         {             Console.WriteLine("Yes");         }         else         {             Console.WriteLine("No");         }     } }

Javascript

 // Function to check whether the number is prime or not function isPrime(n) {   if (n == 2) {     return false;   }   let l = Math.sqrt(n);   for (let i = 3; i <= l; i += 2) {     if (n % i == 0) {       return false;     }   }   return true; }   // Function to check whether the number obtained is proper integer or not function isInteger(num) {   // n will store integer value of num   let n = Math.floor(num);   if (num > n) {     return false;   }   return true; }   // Function to check whether the number is valid or not function isValid(X) {   if (isPrime(X) == false) {     return false;   }   let n = Math.log(3 * X + 1) / Math.log(2);   if (isInteger(n) == false) {     return false;   }   return isPrime(parseInt(n)); }   // Driver Code     let X = 5;     // Function call   if (isValid(X)) {     console.log("Yes");   } else {     console.log("No");   }

Output

Yes

Time Complexity: O(sqrt(n))
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up