# 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

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

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

 `// C++ program to check whether the given ` `// number N is the perfect cube or not ` `. ` `#include ` `    ``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; ` `} `

## Java

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

## Python3

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

## C#

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

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

 `// C++ program to check whether the given ` `// number N is the perfect cube or not ` ` `  `#include ` `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; ` `} `

## Java

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

## Python3

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

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:

 `// 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 ` `    ``insertPF(HashMap 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 ` `    ``primeFactors(``int` `n) ` `    ``{ ` ` `  `        ``HashMap 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 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)); ` `    ``} ` `} `

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