Perfect Cube

Given a number N, the task is to check whether the given number N is a perfect cube or not.
Examples:

Input: N = 216
Output: Yes
Explanation:
As 216 = 6*6*6. Therefore the cube root of 216 is 6.

Input: N = 100
Output: No



Method 1: Naive Approach
The idea is to check for each number from 1 to N if the cube of any of these numbers equals N. If so, then that number is the cube root of N and the N is a perfect cube.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to check whether the given
// number N is the perfect cube or not
.
#include <bits/stdc++.h>
    using namespace std;
  
// Function to check if a number
// is a perfect Cube or not
void perfectCube(int N)
{
    int cube;
  
    // Iterate from 1-N
    for (int i; i <= N; i++) {
  
        // Find the cube of
        // every number
        cube = i * i * i;
  
        // Check if cube equals
        // N or not
        if (cube == N) {
            cout << "Yes";
            return;
        }
        else if (cube > N) {
            cout << "NO";
            return;
        }
    }
}
  
// Driver code
int main()
{
    int N = 216;
  
    // Function call
    perfectCube(N);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to check whether the given 
// number N is the perfect cube or not 
class GFG {
      
    // Function to check if a number 
    // is a perfect Cube or not 
    static void perfectCube(int N) 
    
        int cube; 
      
        // Iterate from 1-N 
        for (int i = 0; i <= N; i++) { 
      
            // Find the cube of 
            // every number 
            cube = i * i * i; 
      
            // Check if cube equals 
            // N or not 
            if (cube == N) { 
                System.out.println("Yes"); 
                return
            
            else if (cube > N) { 
                System.out.println("NO"); 
                return
            
        
    
      
    // Driver code 
    public static void main (String[] args)
    
        int N = 216
      
        // Function call 
        perfectCube(N); 
  
    
}
  
// This code is contributed by AnkitRai01

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to check whether the given 
# number N is the perfect cube or not 
  
# Function to check if a number 
# is a perfect Cube or not 
def perfectCube(N) : 
  
    cube = 0
  
    # Iterate from 1-N 
    for i in range(N + 1) :
  
        # Find the cube of 
        # every number 
        cube = i * i * i; 
  
        # Check if cube equals 
        # N or not 
        if (cube == N) : 
            print("Yes"); 
            return
      
        elif (cube > N) :
            print("NO"); 
            return
  
# Driver code 
if __name__ == "__main__"
  
    N = 216
  
    # Function call 
    perfectCube(N); 
  
# This code is contributed  by Yash_R

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to check whether the given 
// number N is the perfect cube or not 
using System;
  
class GFG {
      
    // Function to check if a number 
    // is a perfect Cube or not 
    static void perfectCube(int N) 
    
        int cube; 
      
        // Iterate from 1-N 
        for (int i = 0; i <= N; i++) { 
      
            // Find the cube of 
            // every number 
            cube = i * i * i; 
      
            // Check if cube equals 
            // N or not 
            if (cube == N) { 
                Console.WriteLine("Yes"); 
                return
            
            else if (cube > N) { 
                Console.WriteLine("NO"); 
                return
            
        
    
      
    // Driver code 
    public static void Main (string[] args)
    
        int N = 216; 
      
        // Function call 
        perfectCube(N); 
  
    
}
  
// This code is contributed by AnkitRai01

chevron_right


Output:

Yes

Time Complexity: O(N)

Method 2: Using inbuilt function
The idea is to use the inbuilt function (cbrt()) to find the cube root of a number which returns floor value of the cube root of the number N. If the cube of this number equals N, then N is a perfect cube otherwise N is not a perfect cube.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to check whether the given
// number N is the perfect cube or not
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to check if a number is
// a perfect Cube using inbuilt function
void perfectCube(int N)
{
    int cube_root;
    cube_root = round(cbrt(N));
  
    // If cube of cube_root is equals to N,
    // then print Yes Else print No
    if (cube_root * cube_root * cube_root == N) {
        cout << "Yes";
        return;
    }
    else {
        cout << "NO";
        return;
    }
}
  
// Driver's code
int main()
{
    int N = 125;
  
    // Function call to check
    // N is cube or not
    perfectCube(N);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to check whether the given
// number N is the perfect cube or not
public class GFG {
  
    // Function to check if a number is
    // a perfect Cube using inbuilt function
    static void perfectCube(int N)
    {
        int cube_root;
        cube_root = (int)Math.round(Math.cbrt(N));
      
        // If cube of cube_root is equals to N,
        // then print Yes Else print No
        if (cube_root * cube_root * cube_root == N) {
            System.out.println("Yes");
            return;
        }
        else {
            System.out.println("NO");
            return;
        }
    }
      
    // Driver's code
    public static void main (String[] args) 
    {
        int N = 125;
      
        // Function call to check
        // N is cube or not
        perfectCube(N);
      
    }
  
}
// This code is contributed by AnkitRai01

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python program to check whether the given
# number N is the perfect cube or not
  
# Function to check if a number is
# a perfect Cube using inbuilt function
def perfectCube(N) :
  
    cube_root = round(N**(1/3));
  
    # If cube of cube_root is equals to N,
    # then print Yes Else print No
    if cube_root * cube_root * cube_root == N :
        print("Yes");
        return;
  
    else :
        print("NO");
        return;
  
# Driver's code
if __name__ == "__main__" :
    N = 125;
  
    # Function call to check
    # N is cube or not
    perfectCube(N);
  
# This code is contributed by AnkitRai01

chevron_right


Output:

Yes

Method 3: Using Prime Factors

  1. Find all the Prime Factors of the given number N using the approach in this article.
  2. Store the frequency of all the prime factors obtained above in a Hash Map.
  3. Traverse the Hash Map and if the frequency of every prime factors is not a multiple of 3, then the given number N is not a perfect cube.

Below is the implementation of the above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to check if a number
// is a perfect cube using prime factors
  
import java.io.*;
import java.lang.*;
import java.util.*;
  
class GFG {
  
    // Inserts the prime factor in the Hash Map
    // if not present
    // If present updates it's frequency
    public static HashMap<Integer, Integer>
    insertPF(HashMap<Integer, Integer> primeFact,
             int fact)
    {
        if (primeFact.containsKey(fact)) {
  
            int freq;
            freq = primeFact.get(fact);
            primeFact.replace(fact, ++freq);
        }
        else {
            primeFact.put(fact, 1);
        }
        return primeFact;
    }
  
    // A utility function to find all
    // prime factors of a given number N
    public static HashMap<Integer, Integer>
    primeFactors(int n)
    {
  
        HashMap<Integer, Integer> primeFact
            = new HashMap<>();
  
        // Insert the number of 2s
        // that divide n
        while (n % 2 == 0) {
            primeFact = insertPF(primeFact, 2);
            n /= 2;
        }
  
        // n must be odd at this point.
        // So we can skip one element
        for (int i = 3; i <= Math.sqrt(n);
             i += 2) {
  
            // While i divides n, insert i
            // and divide n
            while (n % i == 0) {
                primeFact = insertPF(primeFact, i);
                n /= i;
            }
        }
  
        // This condition is to handle
        // the case when n is a prime
        // number greater than 2
        if (n > 2)
            primeFact = insertPF(primeFact, n);
  
        return primeFact;
    }
  
    // Function to check if a number
    // is a perfect cube
    public static String perfectCube(int n)
    {
  
        HashMap<Integer, Integer> primeFact;
        primeFact = primeFactors(n);
  
        // Using values() for iteration
        // over keys
        for (int freq : primeFact.values()) {
            if (freq % 3 != 0)
                return "No";
        }
        return "Yes";
    }
  
    // Driver Code
    public static void main(String[] args)
    {
        int N = 216;
  
        // Function to check if N is
        // perfect cube or not
        System.out.println(perfectCube(N));
    }
}

chevron_right


Output:

Yes



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 : Yash_R, AnkitRai01