# Perfect Cube

• Last Updated : 30 Nov, 2021

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

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

## Javascript

 ``

Output:

`Yes`

Time Complexity: O(N)

Auxiliary Space: O(1)

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`

## 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 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) {` `            ``Console.WriteLine(``"Yes"``);` `            ``return``;` `        ``}` `        ``else` `{` `            ``Console.WriteLine(``"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`

## Javascript

 ``

Output:

`Yes`

Time Complexity: O(cbrt(N))

Auxiliary Space: O(1)

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:

## C++

 `// C++ program to check if a number` `// is a perfect cube using prime factors` `#include` `using` `namespace` `std;`   `// Inserts the prime factor in HashMap` `// if not present` `// if present updates it's frequency` `map<``int``, ``int``> insertPF(map<``int``, ``int``> primeFact,` `                           ``int` `fact)` `{` `    ``if` `(primeFact.find(fact) != primeFact.end())` `    ``{` `        ``primeFact[fact]++;` `    ``}` `    ``else` `    ``{` `        ``primeFact[fact] = 1;` `    ``}` `    ``return` `primeFact; ` `} `   `// A utility function to find all` `// prime factors of a given number N` `map<``int``, ``int``> primeFactors (``int` `n)` `{` `    ``map<``int``, ``int``> primeFact;`   `    ``// 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 <= ``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 perfect cube` `string perfectCube (``int` `n)` `{` `    ``map<``int``, ``int``> primeFact;` `    ``primeFact = primeFactors(n);`   `    ``// Iteration in Map` `    ``for``(``auto` `x : primeFact)` `    ``{` `        ``if` `(x.second % 3 != 0)` `            ``return` `"No"``;` `    ``}` `    ``return` `"Yes"``;` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `N = 216;`   `    ``// Function to check if N is` `    ``// perfect cube or not` `    ``cout << perfectCube(N);`   `    ``return` `0;` `}`   `// This code is contributed by himanshu77`

## Java

 `// 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));` `    ``}` `}`

## Python3

 `# Python3 program to check if a number ` `# is a perfect cube using prime factors ` `import` `math`   `# Inserts the prime factor in HashMap ` `# if not present ` `# if present updates it's frequency ` `def` `insertPF(primeFact, fact) : `   `    ``if` `(fact ``in` `primeFact) :` `    `  `        ``primeFact[fact] ``+``=` `1` `     `  `    ``else` `:` `     `  `        ``primeFact[fact] ``=` `1`   `    ``return` `primeFact` `  `  `# A utility function to find all ` `# prime factors of a given number N ` `def` `primeFactors (n) : `   `    ``primeFact ``=` `{}` `  `  `    ``# Insert the number of 2s ` `    ``# that divide n ` `    ``while` `(n ``%` `2` `=``=` `0``) : ` `    `  `        ``primeFact ``=` `insertPF(primeFact, ``2``)` `        ``n ``=` `n ``/``/` `2` `  `  `    ``# n must be odd at this point ` `    ``# So we can skip one element ` `    ``for` `i ``in` `range``(``3``, ``int``(math.sqrt(n)) ``+` `1``, ``2``) :` `  `  `        ``# while i divides n, insert ` `        ``# i and divide n ` `        ``while` `(n ``%` `i ``=``=` `0``) :` `    `  `            ``primeFact ``=` `insertPF(primeFact, i)` `            ``n ``=` `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 perfect cube ` `def` `perfectCube (n) : `   `    ``primeFact ``=` `{}` `    ``primeFact ``=` `primeFactors(n)` `  `  `    ``# Iteration in Map ` `    ``for` `x ``in` `primeFact : ` `    `  `        ``if` `(primeFact[x] ``%` `3` `!``=` `0``) :` `            ``return` `"No"` `     `  `    ``return` `"Yes"` `  `  `N ``=` `216`   `# Function to check if N is ` `# perfect cube or not ` `print``(perfectCube(N)) `   `# This code is contributed by divyeshrabadiya07.`

## C#

 `// C# program to check if a number` `// is a perfect cube using prime factors`   `using` `System;` `using` `System.Collections.Generic;`   `public` `class` `GFG {` ` `  `    ``// Inserts the prime factor in the Hash Map` `    ``// if not present` `    ``// If present updates it's frequency` `    ``public` `static` `Dictionary<``int``, ``int``>` `    ``insertPF(Dictionary<``int``, ``int``> primeFact,` `             ``int` `fact)` `    ``{` `        ``if` `(primeFact.ContainsKey(fact)) {` ` `  `            ``int` `freq;` `            ``freq = primeFact[fact];` `            ``primeFact[fact] = ++freq;` `        ``}` `        ``else` `{` `            ``primeFact.Add(fact, 1);` `        ``}` `        ``return` `primeFact;` `    ``}` ` `  `    ``// A utility function to find all` `    ``// prime factors of a given number N` `    ``public` `static` `Dictionary<``int``, ``int``>` `    ``primeFactors(``int` `n)` `    ``{` ` `  `        ``Dictionary<``int``, ``int``> primeFact` `            ``= ``new` `Dictionary<``int``, ``int``>();` ` `  `        ``// 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)` `    ``{` ` `  `        ``Dictionary<``int``, ``int``> primeFact;` `        ``primeFact = primeFactors(n);` ` `  `        ``// Using values() for iteration` `        ``// over keys` `        ``foreach` `(``int` `freq ``in` `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` `        ``Console.WriteLine(perfectCube(N));` `    ``}` `}`   `// This code is contributed by sapnasingh4991`

## Javascript

 `    `

Output:

`Yes`

Time Complexity: O(sqrt(n))

Auxiliary Space: O(sqrt(n))

My Personal Notes arrow_drop_up
Recommended Articles
Page :