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 <bits/stdc++.h> 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<Integer, Integer> cubes = new HashMap<>(); for ( int i = 1 ; i * i * i <= N; i++) cubes.put((i * i * i), i); // Traverse the map Iterator<Map.Entry<Integer, Integer> > itr = cubes.entrySet().iterator(); while (itr.hasNext()) { Map.Entry<Integer, Integer> 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. |
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 DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.