Given a positive integer **N**, the task is to check if the given number **N** can be represented as the product of two positive perfect cubes or not. If it is possible, then print **“Yes”**. Otherwise, print **“No”**.

**Examples:**

Input:N = 216Output:YesExplanation:

The given number N(= 216) can be represented as 8 * 27 = 2^{3 }* 3^{3}.

Therefore, print Yes.

Input:N = 10Output:No

**Approach:** The simplest approach to solve the given problem is to store the perfect cubes of all numbers from **1** to cubic root of **N** in a Map and check if **N** can be represented as the product of two numbers present in the Map or not.

Follow the steps below to solve the problem:

- Initialize an ordered map, say
**cubes**, that stores the perfect cubes in the sorted order. - Traverse the map and check if there exists any pair whose product is
**N**, then print**“Yes”**. Otherwise, print**“No”**.

Below is the implementation of the above approach:

## C++

`// C++ program for the above approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function to check if N can` `// be represented as the product` `// of two perfect cubes or not` `void` `productOfTwoPerfectCubes(` `int` `N)` `{` ` ` `// Stores the perfect cubes` ` ` `map<` `int` `, ` `int` `> cubes;` ` ` `for` `(` `int` `i = 1;` ` ` `i * i * i <= N; i++)` ` ` `cubes[i * i * i] = i;` ` ` `// Traverse the Map` ` ` `for` `(` `auto` `itr = cubes.begin();` ` ` `itr != cubes.end();` ` ` `itr++) {` ` ` `// Stores the first number` ` ` `int` `firstNumber = itr->first;` ` ` `if` `(N % itr->first == 0) {` ` ` `// Stores the second number` ` ` `int` `secondNumber = N / itr->first;` ` ` `// Search the pair for the` ` ` `// first number to obtain` ` ` `// product N from the Map` ` ` `if` `(cubes.find(secondNumber)` ` ` `!= cubes.end()) {` ` ` `cout << ` `"Yes"` `;` ` ` `return` `;` ` ` `}` ` ` `}` ` ` `}` ` ` `// If N cannot be represented` ` ` `// as the product of the two` ` ` `// positive perfect cubes` ` ` `cout << ` `"No"` `;` `}` `// Driver Code` `int` `main()` `{` ` ` `int` `N = 216;` ` ` `productOfTwoPerfectCubes(N);` ` ` `return` `0;` `}` |

## Python3

`# Python3 program for the above approach` `# Function to check if N can` `# be represented as the product` `# of two perfect cubes or not` `def` `productOfTwoPerfectCubes(N):` ` ` `# Stores the perfect cubes` ` ` `cubes ` `=` `{}` ` ` `i ` `=` `1` ` ` ` ` `while` `i ` `*` `i ` `*` `i <` `=` `N:` ` ` `cubes[i ` `*` `i ` `*` `i] ` `=` `i` ` ` `i ` `+` `=` `1` ` ` `# Traverse the Map` ` ` `for` `itr ` `in` `cubes:` ` ` `# Stores the first number` ` ` `firstNumber ` `=` `itr` ` ` `if` `(N ` `%` `itr ` `=` `=` `0` `):` ` ` `# Stores the second number` ` ` `secondNumber ` `=` `N ` `/` `/` `itr` ` ` `# Search the pair for the` ` ` `# first number to obtain` ` ` `# product N from the Map` ` ` `if` `(secondNumber ` `in` `cubes):` ` ` `print` `(` `"Yes"` `)` ` ` `return` ` ` `# If N cannot be represented` ` ` `# as the product of the two` ` ` `# positive perfect cubes` ` ` `print` `(` `"No"` `)` `# Driver Code` `if` `__name__ ` `=` `=` `"__main__"` `:` ` ` ` ` `N ` `=` `216` ` ` ` ` `productOfTwoPerfectCubes(N)` `# This code is contributed by mohit ukasp` |

**Output:**

Yes

**Time Complexity:** O(N^{1/3} * log(N)) **Auxiliary Space:** O(N^{1/3})

**Efficient Approach:** The above approach can also be optimized based on the observation that only perfect cubes can be represented as a product of 2 perfect cubes.

Let the two numbers be

xandysuch that x^{3 }* y^{3}= N— (1)

Equation (1) can be written as:

=> (x*y)^{3}= N

Taking cube root both sides,

=> x*y = (N)^{1/3 }— (2)

For equation (2) to be true, N should be a perfect cube.

So, the problem reduces to check if **N** is a perfect cube or not. If found to be true, print **“Yes”**, else** “No”**.

Below is the implementation of the above approach:

## C++

`// C++ program for the above approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function to check if the number N` `// can be represented as the product` `// of two perfect cubes or not` `void` `productOfTwoPerfectCubes(` `int` `N)` `{` ` ` `int` `cube_root;` ` ` `cube_root = round(cbrt(N));` ` ` `// If cube of cube_root is N` ` ` `if` `(cube_root * cube_root` ` ` `* cube_root` ` ` `== N) {` ` ` `cout << ` `"Yes"` `;` ` ` `return` `;` ` ` `}` ` ` `// Otherwise, print No` ` ` `else` `{` ` ` `cout << ` `"No"` `;` ` ` `return` `;` ` ` `}` `}` `// Driver Code` `int` `main()` `{` ` ` `int` `N = 216;` ` ` `productOfTwoPerfectCubes(N);` ` ` `return` `0;` `}` |

## Java

`// Java program for the above approach` `import` `java.lang.*;` `class` `GFG{` ` ` `// Function to check if the number N` `// can be represented as the product` `// of two perfect cubes or not` `public` `static` `void` `productOfTwoPerfectCubes(` `double` `N)` `{` ` ` `double` `cube_root;` ` ` `cube_root = Math.round(Math.cbrt(N));` ` ` `// If cube of cube_root is N` ` ` `if` `(cube_root * cube_root * cube_root == N)` ` ` `{` ` ` `System.out.println(` `"Yes"` `);` ` ` `return` `;` ` ` `}` ` ` `// Otherwise, print No` ` ` `else` ` ` `{` ` ` `System.out.println(` `"No"` `);` ` ` `return` `;` ` ` `}` `}` `// Driver Code` `public` `static` `void` `main(String args[])` `{` ` ` `double` `N = ` `216` `;` ` ` ` ` `productOfTwoPerfectCubes(N);` `}` `}` `// This code is contributed by SoumikMondal` |

## Python3

`# Python3 program for the above approach` `# Function to check if the number N` `# can be represented as the product` `# of two perfect cubes or not` `def` `productOfTwoPerfectCubes(N):` ` ` ` ` `cube_root ` `=` `round` `((N) ` `*` `*` `(` `1` `/` `3` `))` ` ` `print` `(cube_root)` ` ` `# If cube of cube_root is N` ` ` `if` `(cube_root ` `*` `cube_root ` `*` `cube_root ` `=` `=` `N):` ` ` `print` `(` `"Yes"` `)` ` ` `return` ` ` ` ` `# Otherwise, prNo` ` ` `else` `:` ` ` `print` `(` `"No"` `)` ` ` `return` `# Driver Code` `if` `__name__ ` `=` `=` `'__main__'` `:` ` ` ` ` `N ` `=` `216` ` ` ` ` `productOfTwoPerfectCubes(N)` `# This code is contributed by mohit kumar 29` |

## C#

`// C# program for the above approach` `using` `System;` `using` `System.Collections.Generic;` `using` `System.Linq;` `class` `GFG{` ` ` `// Function to check if the number N` `// can be represented as the product` `// of two perfect cubes or not` `public` `static` `void` `productOfTwoPerfectCubes(` `double` `N)` `{` ` ` `double` `cube_root;` ` ` `cube_root = Math.Round(Math.Cbrt(N));` ` ` `// If cube of cube_root is N` ` ` `if` `(cube_root * cube_root * cube_root == N)` ` ` `{` ` ` `Console.Write(` `"Yes"` `);` ` ` `return` `;` ` ` `}` ` ` `// Otherwise, print No` ` ` `else` ` ` `{` ` ` `Console.Write(` `"No"` `);` ` ` `return` `;` ` ` `}` `}` `// Driver Code` `static` `public` `void` `Main()` `{` ` ` `double` `N = 216;` ` ` ` ` `productOfTwoPerfectCubes(N);` `}` `}` `// This code is contributed by mohit kumar 29.` |

**Output:**

Yes

**Time Complexity:** O(N^{1/3})**Auxiliary Space:** O(1)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the **Essential Maths for CP Course** at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**