Given an integer N, the task is to check if this number can be represented as the sum of two consecutive perfect cubes or not.
Examples:
Input: N = 35
Output: Yes
Explanation:
Since, 35 = 23 + 33, therefore the required answer is Yes.Input: N = 14
Output: No
Naive Approach: The simplest approach to solve the problem is to iterate from 1 to cube root of N and check if the sum of perfect cubes of any two consecutive numbers is equal to N or not. If found to be true, print “Yes”. Otherwise, print “No”.
Below is the implementation of the above approach:
// C++ Program of the // above approach #include <bits/stdc++.h> using namespace std;
// Function to check if a number // can be expressed as the sum of // cubes of two consecutive numbers bool isCubeSum( int n)
{ for ( int i = 1; i * i * i <= n; i++) {
if (i * i * i
+ (i + 1) * (i + 1) * (i + 1)
== n)
return true ;
}
return false ;
} // Driver Code int main()
{ int n = 35;
if (isCubeSum(n))
cout << "Yes" ;
else
cout << "No" ;
} |
// Java program of the // above approach import java.util.*;
class GFG{
// Function to check if a number // can be expressed as the sum of // cubes of two consecutive numbers static boolean isCubeSum( int n)
{ for ( int i = 1 ; i * i * i <= n; i++)
{
if (i * i * i + (i + 1 ) *
(i + 1 ) * (i + 1 ) == n)
return true ;
}
return false ;
} // Driver Code public static void main(String[] args)
{ int n = 35 ;
if (isCubeSum(n))
System.out.print( "Yes" );
else
System.out.print( "No" );
} } // This code is contributed by Amit Katiyar |
# Python3 program of the # above approach # Function to check if a number # can be expressed as the sum of # cubes of two consecutive numbers def isCubeSum(n):
for i in range ( 1 , int ( pow (n, 1 / 3 )) + 1 ):
if (i * i * i + (i + 1 ) *
(i + 1 ) * (i + 1 ) = = n):
return True ;
return False ;
# Driver Code if __name__ = = '__main__' :
n = 35 ;
if (isCubeSum(n)):
print ( "Yes" );
else :
print ( "No" );
# This code is contributed by Amit Katiyar |
// C# program of the // above approach using System;
class GFG{
// Function to check if a number // can be expressed as the sum of // cubes of two consecutive numbers static bool isCubeSum( int n)
{ for ( int i = 1; i * i * i <= n; i++)
{
if (i * i * i + (i + 1) *
(i + 1) * (i + 1) == n)
return true ;
}
return false ;
} // Driver Code public static void Main(String[] args)
{ int n = 35;
if (isCubeSum(n))
Console.Write( "Yes" );
else
Console.Write( "No" );
} } // This code is contributed by Amit Katiyar |
<script> // Javascript Program of the // above approach // Function to check if a number // can be expressed as the sum of // cubes of two consecutive numbers function isCubeSum(n)
{ for ( var i = 1; i * i * i <= n; i++) {
if (i * i * i
+ (i + 1) * (i + 1) * (i + 1)
== n)
return true ;
}
return false ;
} // Driver Code var n = 35;
if (isCubeSum(n))
document.write( "Yes" );
else document.write( "No" );
</script> |
Output:
Yes
Time Complexity: O(N1/3)
Auxiliary Space: O(1)
Efficient Approach: The above approach can be optimized based on the following observations:
- A number can be represented as the sum of the perfect cube of two consecutive numbers if the sum of the cube root of both consecutive numbers is equal to N.
- This can be checked by the formula:
- For example, if N = 35, then check if the equation below is equal to N or not:
Below is the implementation of the above approach:
// C++ Program to // implement above approach #include <bits/stdc++.h> using namespace std;
// Function to check that a number // is the sum of cubes of 2 // consecutive numbers or not bool isSumCube( int N)
{ int a = cbrt(N);
int b = a - 1;
// Condition to check if a
// number is the sum of cubes of 2
// consecutive numbers or not
return ((a * a * a + b * b * b) == N);
} // Driver Code int main()
{ int i = 35;
// Function call
if (isSumCube(i)) {
cout << "Yes" ;
}
else {
cout << "No" ;
}
return 0;
} |
// Java program to implement // above approach class GFG{
// Function to check that a number // is the sum of cubes of 2 // consecutive numbers or not static boolean isSumCube( int N)
{ int a = ( int )Math.cbrt(N);
int b = a - 1 ;
// Condition to check if a
// number is the sum of cubes of 2
// consecutive numbers or not
return ((a * a * a + b * b * b) == N);
} // Driver Code public static void main(String[] args)
{ int i = 35 ;
// Function call
if (isSumCube(i))
{
System.out.print( "Yes" );
}
else
{
System.out.print( "No" );
}
} } // This code is contributed by Amit Katiyar |
# Python3 program to # implement above approach # Function to check that a number # is the sum of cubes of 2 # consecutive numbers or not def isSumCube(N):
a = int ( pow (N, 1 / 3 ))
b = a - 1
# Condition to check if a
# number is the sum of cubes of 2
# consecutive numbers or not
ans = ((a * a * a + b * b * b) = = N)
return ans
# Driver Code i = 35
# Function call if (isSumCube(i)):
print ( "Yes" )
else :
print ( "No" )
# This code is contributed by Shivam Singh |
// C# program to implement // above approach using System;
class GFG{
// Function to check that a number // is the sum of cubes of 2 // consecutive numbers or not static bool isSumCube( int N)
{ int a = ( int )Math.Pow(N, ( double ) 1 / 3);
int b = a - 1;
// Condition to check if a
// number is the sum of cubes of 2
// consecutive numbers or not
return ((a * a * a + b * b * b) == N);
} // Driver Code public static void Main(String[] args)
{ int i = 35;
// Function call
if (isSumCube(i))
{
Console.Write( "Yes" );
}
else
{
Console.Write( "No" );
}
} } // This code is contributed by 29AjayKumar |
<script> // Javascript program to implement // above approach // Function to check that a number // is the sum of cubes of 2 // consecutive numbers or not function isSumCube(N)
{ var a = parseInt(Math.cbrt(N));
var b = a - 1;
// Condition to check if a
// number is the sum of cubes of 2
// consecutive numbers or not
return ((a * a * a + b * b * b) == N);
} // Driver Code var i = 35;
// Function call if (isSumCube(i))
{ document.write( "Yes" );
} else { document.write( "No" );
} // This code is contributed by todaysgaurav </script> |
Output:
Yes
Time Complexity: O(logN) because using cbrt function
Auxiliary Space: O(1)