Related Articles
Check if a number can be represented as sum of two positive perfect cubes
• Last Updated : 18 Mar, 2021

Given an integer N, the task is to check if N can be represented as the sum of two positive perfect cubes or not.

Examples:

Input: N = 28
Output: Yes
Explanation:
Since, 28 = 27 + 1 = 33 + 13.
Therefore, the required answer is Yes.

Input: N = 34
Output: No

Approach: The idea 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 sum of two numbers present in the Map or not. Follow the steps below to solve the problem:

• Initialize an ordered map, say cubes, to store the perfect cubes of first N natural numbers in sorted order.
• Traverse the map and check for the pair having sum equal to N.
• If such a pair is found having sum N, then print “Yes”. Otherwise, print “No”.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include ``using` `namespace` `std;` `// Function to check if N can be represented``// as sum of two perfect cubes or not``void` `sumOfTwoPerfectCubes(``int` `N)``{``    ``// Stores the perfect cubes``    ``// of first N natural numbers``    ``map<``int``, ``int``> cubes;``    ``for` `(``int` `i = 1; i * i * i <= N; i++)``        ``cubes[i * i * i] = i;` `    ``// Traverse the map``    ``map<``int``, ``int``>::iterator itr;``    ``for` `(itr = cubes.begin();``         ``itr != cubes.end(); itr++) {` `        ``// Stores first number``        ``int` `firstNumber = itr->first;` `        ``// Stores second number``        ``int` `secondNumber = N - itr->first;` `        ``// Search the pair for the first``        ``// number to obtain sum N from the Map``        ``if` `(cubes.find(secondNumber)``            ``!= cubes.end()) {``            ``cout << ``"True"``;``            ``return``;``        ``}``    ``}` `    ``// If N cannot be represented as``    ``// sum of two positive perfect cubes``    ``cout << ``"False"``;``}` `// Driver Code``int` `main()``{``    ``int` `N = 28;` `    ``// Function call to check if N``    ``// can be represented as``    ``// sum of two perfect cubes or not``    ``sumOfTwoPerfectCubes(N);` `    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.util.*;``class` `GFG``{` `  ``// Function to check if N can be represented``  ``// as sum of two perfect cubes or not``  ``public` `static` `void` `sumOfTwoPerfectCubes(``int` `N)``  ``{` `    ``// Stores the perfect cubes``    ``// of first N natural numbers``    ``HashMap cubes = ``new` `HashMap<>();``    ``for` `(``int` `i = ``1``; i * i * i <= N; i++)``      ``cubes.put((i * i * i), i);` `    ``// Traverse the map``    ``Iterator > itr``      ``= cubes.entrySet().iterator();``    ``while` `(itr.hasNext())``    ``{``      ``Map.Entry entry = itr.next();` `      ``// Stores first number``      ``int` `firstNumber = entry.getKey();` `      ``// Stores second number``      ``int` `secondNumber = N - entry.getKey();` `      ``// Search the pair for the first``      ``// number to obtain sum N from the Map``      ``if` `(cubes.containsKey(secondNumber))``      ``{``        ``System.out.println(``"True"``);``        ``return``;``      ``}``    ``}` `    ``// If N cannot be represented as``    ``// sum of two positive perfect cubes``    ``System.out.println(``"False"``);``  ``}` `  ``// Driver code``  ``public` `static` `void` `main(String[] args)``  ``{``    ``int` `N = ``28``;` `    ``// Function call to check if N``    ``// can be represented as``    ``// sum of two perfect cubes or not``    ``sumOfTwoPerfectCubes(N);``  ``}``}` `// This code is contributed by shailjapriya.`

## Python3

 `# Python3 program for the above approach` `# Function to check if N can be represented``# as sum of two perfect cubes or not``def` `sumOfTwoPerfectCubes(N) :` `    ``# Stores the perfect cubes``    ``# of first N natural numbers``    ``cubes ``=` `{}``    ``i ``=` `1``    ``while` `i``*``i``*``i <``=` `N :``        ``cubes[i``*``i``*``i] ``=` `i``        ``i ``+``=` `1`` ` `    ``# Traverse the map``    ``for` `itr ``in` `cubes :`` ` `        ``# Stores first number``        ``firstNumber ``=` `itr`` ` `        ``# Stores second number``        ``secondNumber ``=` `N ``-` `itr`` ` `        ``# Search the pair for the first``        ``# number to obtain sum N from the Map``        ``if` `secondNumber ``in` `cubes :``            ``print``(``"True"``, end ``=` `"")``            ``return`` ` `    ``# If N cannot be represented as``    ``# sum of two positive perfect cubes``    ``print``(``"False"``, end ``=` `"")` `N ``=` `28` `# Function call to check if N``# can be represented as``# sum of two perfect cubes or not``sumOfTwoPerfectCubes(N)` `# This code is contributed by divyeshrabadiya07.`

## C#

 `// C# program for the above approach``using` `System;``using` `System.Collections.Generic;``using` `System.Linq;` `class` `GFG{` `  ``// Function to check if N can be represented``  ``// as sum of two perfect cubes or not``  ``public` `static` `void` `sumOfTwoPerfectCubes(``int` `N)``  ``{` `    ``// Stores the perfect cubes``    ``// of first N natural numbers``    ``Dictionary<``int``,``             ``int``> cubes = ``new` `Dictionary<``int``,``                                      ``int``>();``    ``for` `(``int` `i = 1; i * i * i <= N; i++)``      ``cubes.Add((i * i * i), i);``    ` `    ``var` `val = cubes.Keys.ToList();``    ``foreach``(``var` `key ``in` `val)``    ``{``      ``// Stores first number``      ``int` `firstNumber = cubes[1];` `      ``// Stores second number``      ``int` `secondNumber = N - cubes[1];` `      ``// Search the pair for the first``      ``// number to obtain sum N from the Map``      ``if` `(cubes.ContainsKey(secondNumber))``      ``{``        ``Console.Write(``"True"``);``        ``return``;``      ``}``    ``}` `    ``// If N cannot be represented as``    ``// sum of two positive perfect cubes``    ``Console.Write(``"False"``);``  ``}`  `// Driver Code``static` `public` `void` `Main()``{``    ``int` `N = 28;` `    ``// Function call to check if N``    ``// can be represented as``    ``// sum of two perfect cubes or not``    ``sumOfTwoPerfectCubes(N);``}``}` `// This code is contributed by code_hunt.`
Output
`True`

Time Complexity: O(N1/3 * log(N1/3))
Auxiliary Space: O(N1/3

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.

My Personal Notes arrow_drop_up