Números de Saint-Exupéry

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>
Producción: 

Yes

 

Complejidad de tiempo: O(n^2)  
Referencia : http://www.numbersaplenty.com/set/Saint-Exupery_number/
 

Publicación traducida automáticamente

Artículo escrito por spp____ y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *