Dado un número entero N , la tarea es verificar si este número se puede representar como la suma de dos cubos perfectos consecutivos o no.
Ejemplos:
Entrada: N = 35
Salida: Sí
Explicación:
Ya que, 35 = 2 3 + 3 3 , por lo tanto, la respuesta requerida es Sí.Entrada: N = 14
Salida: No
Enfoque ingenuo: el enfoque más simple para resolver el problema es iterar desde 1 hasta la raíz cúbica de N y verificar si la suma de los cubos perfectos de dos números consecutivos es igual a N o no. Si es cierto, escriba «Sí». De lo contrario, escriba “No”.
A continuación se muestra la implementación del enfoque anterior:
C++
// 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
// 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
# 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#
// 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
Javascript
<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>
Yes
Enfoque eficiente: el enfoque anterior se puede optimizar en función de las siguientes observaciones:
- Un número se puede representar como la suma del cubo perfecto de dos números consecutivos si la suma de la raíz cúbica de ambos números consecutivos es igual a N.
- Esto se puede comprobar mediante la fórmula:
- Por ejemplo, si N = 35 , entonces compruebe si la siguiente ecuación es igual a N o no:
A continuación se muestra la implementación del enfoque anterior:
C++
// 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
// 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
# 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#
// 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
Javascript
<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>
Yes
Tiempo Complejidad: O(1)
Espacio Auxiliar: O(1)