Número de Saint-Exupéry un número N tal que N es el producto de los tres lados del triángulo de Pitágoras.
Algunos de los números de Saint-Exupéry son:
60, 480, 780, 1620, 2040, 3840, 4200, 6240, 7500, 12180….
Comprobar si N es un número de Saint Exupery
Dado un número N , la tarea es verificar si N es un número de Saint-Exupery o no. Si N es un número de Saint-Exupéry, escriba «Sí» , de lo contrario, escriba «No» .
Ejemplos:
Entrada: N = 60
Salida: Sí
Explicación:
60 = 3 * 4 * 5 y 3^2 + 4^2 = 5^2.
Entrada: N = 120
Salida: No
Enfoque ingenuo: una solución simple es ejecutar tres bucles anidados para generar todos los tripletes posibles y, para cada triplete, verificar si es un triplete pitagórico y ha dado un producto. La complejidad temporal de esta solución es O(n 3 ).
Enfoque eficiente: la idea es ejecutar dos ciclos, donde el primer ciclo se ejecuta desde i = 1 a n/3, el segundo ciclo se ejecuta desde j = i+1 a n/2. En el segundo ciclo, verificamos si (n / i / j) es igual a i * i + j * j.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation to check if N // is a Saint-Exupery number #include <bits/stdc++.h> using namespace std; // Function to check if a number is // a Saint-Exupery number bool isSaintExuperyNum(int n) { // Considering triplets in // sorted order. The value // of first element in sorted // triplet can be at-most n/3. for (int i = 1; i <= n / 3; i++) { // The value of second // element must be less // than equal to n/2 for (int j = i + 1; j <= n / 2; j++) { int k = n / i / j; if (i * i + j * j == k * k) { if (i * j * k == n) return true; ; } } } return false; } // Driver Code int main() { // Given Number N int N = 60; // Function Call if (isSaintExuperyNum(N)) cout << "Yes"; else cout << "No"; return 0; }
Java
// Java program for above approach class GFG{ // Function to check if a number is // a Saint-Exupery number static boolean isSaintExuperyNum(int n) { // Considering triplets in // sorted order. The value // of first element in sorted // triplet can be at-most n/3. for (int i = 1; i <= n / 3; i++) { // The value of second // element must be less // than equal to n/2 for (int j = i + 1; j <= n / 2; j++) { int k = n / i / j; if (i * i + j * j == k * k) { if (i * j * k == n) return true; } } } return false; } // Driver Code public static void main(String[] args) { // Given Number N int N = 60; // Function Call if (isSaintExuperyNum(N)) System.out.print("Yes"); else System.out.print("No"); } } // This code is contributed by Shubham Prakash
Python3
# Python3 implementation to check if N # is a Saint-Exupery number # Function to check if a number is # a Saint-Exupery number def isSaintExuperyNum(n): # Considering triplets in # sorted order. The value # of first element in sorted # triplet can be at-most n/3. for i in range(1, (n // 3) + 1): # The value of second # element must be less # than equal to n/2 for j in range(i + 1, (n // 2) + 1): k = n / i / j if i * i + j * j == k * k: if i * j * k == n: return True return False # Driver Code # Given Number N N = 60 # Function Call if isSaintExuperyNum(N): print("Yes") else: print("No") # This code is contributed by # divyamohan123
C#
// C# program for above approach using System; class GFG{ // Function to check if a number is // a Saint-Exupery number static bool isSaintExuperyNum(int n) { // Considering triplets in // sorted order. The value // of first element in sorted // triplet can be at-most n/3. for (int i = 1; i <= n / 3; i++) { // The value of second // element must be less // than equal to n/2 for (int j = i + 1; j <= n / 2; j++) { int k = n / i / j; if (i * i + j * j == k * k) { if (i * j * k == n) return true; } } } return false; } // Driver Code public static void Main() { // Given Number N int N = 60; // Function Call if (isSaintExuperyNum(N)) Console.Write("Yes"); else Console.Write("No"); } } // This code is contributed by Code_Mech
Javascript
<script> // Javascript program for above approach // Function to check if a number is // a Saint-Exupery number function isSaintExuperyNum( n) { // Considering triplets in // sorted order. The value // of first element in sorted // triplet can be at-most n/3. for ( i = 1; i <= n / 3; i++) { // The value of second // element must be less // than equal to n/2 for ( j = i + 1; j <= n / 2; j++) { let k = n / i / j; if (i * i + j * j == k * k) { if (i * j * k == n) return true; } } } return false; } // Driver Code // Given Number N let N = 60; // Function Call if (isSaintExuperyNum(N)) document.write("Yes"); else document.write("No"); // This code contributed by gauravrajput1 </script>
Yes
Complejidad de tiempo: O(n^2)
Referencia : http://www.numbersaplenty.com/set/Saint-Exupery_number/