número perfecto

Un número es un número perfecto si es igual a la suma de sus divisores propios, es decir, la suma de sus divisores positivos excluyendo el propio número. Escribe una función para verificar si un número dado es perfecto o no. 
Ejemplos: 

Input: n = 15
Output: false
Divisors of 15 are 1, 3 and 5. Sum of 
divisors is 9 which is not equal to 15.

Input: n = 6
Output: true
Divisors of 6 are 1, 2 and 3. Sum of 
divisors is 6.

Una solución simple es pasar por todos los números del 1 al n-1 y verificar si es un divisor. Mantener la suma de todos los divisores. Si la suma se vuelve igual a n, entonces devuelve verdadero, de lo contrario, devuelve falso.
Una solución eficiente es recorrer números hasta la raíz cuadrada de n. Si un número ‘i’ divide a n, suma tanto ‘i’ como n/i a la suma. 
A continuación se muestra la implementación de la solución eficiente. 
 

C++

// C++ program to check if a given number is perfect
// or not
#include<iostream>
using namespace std;
 
// Returns true if n is perfect
bool isPerfect(long long int n)
{
    // To store sum of divisors
    long long int sum = 1;
  
    // Find all divisors and add them
    for (long long int i=2; i*i<=n; i++)
    {
        if (n%i==0)
        {
            if(i*i!=n)
                sum = sum + i + n/i;
            else
                sum=sum+i;
        }
    }
     // If sum of divisors is equal to
     // n, then n is a perfect number
     if (sum == n && n != 1)
          return true;
  
     return false;
}
  
// Driver program
int main()
{
    cout << "Below are all perfect numbers till 10000\n";
    for (int n =2; n<10000; n++)
        if (isPerfect(n))
            cout << n << " is a perfect number\n";
  
    return 0;
}

Java

// Java program to check if a given
// number is perfect or not
class GFG
{
     
// Returns true if n is perfect
static boolean isPerfect(int n)
{
    // To store sum of divisors
    int sum = 1;
 
    // Find all divisors and add them
    for (int i = 2; i * i <= n; i++)
    {
        if (n % i==0)
        {
            if(i * i != n)
                sum = sum + i + n / i;
            else
                sum = sum + i;
        }
    }
    // If sum of divisors is equal to
    // n, then n is a perfect number
    if (sum == n && n != 1)
        return true;
 
    return false;
}
 
// Driver program
public static void main (String[] args)
{
    System.out.println("Below are all perfect" +
                                "numbers till 10000");
    for (int n = 2; n < 10000; n++)
        if (isPerfect(n))
            System.out.println( n +
                    " is a perfect number");
}
}
 
// This code is contributed by mits

Python3

# Python3 code to check if a given
# number is perfect or not
 
# Returns true if n is perfect
def isPerfect( n ):
     
    # To store sum of divisors
    sum = 1
     
    # Find all divisors and add them
    i = 2
    while i * i <= n:
        if n % i == 0:
            sum = sum + i + n/i
        i += 1
     
    # If sum of divisors is equal to
    # n, then n is a perfect number
     
    return (True if sum == n and n!=1 else False)
 
# Driver program
print("Below are all perfect numbers till 10000")
n = 2
for n in range (10000):
    if isPerfect (n):
        print(n , " is a perfect number")
         
# This code is contributed by "Sharad_Bhardwaj".

C#

// C# program to check if a given
// number is perfect or not
 
class GFG
{
     
// Returns true if n is perfect
static bool isPerfect(int n)
{
    // To store sum of divisors
    int sum = 1;
 
    // Find all divisors and add them
    for (int i = 2; i * i <= n; i++)
    {
        if (n % i==0)
        {
            if(i * i != n)
                sum = sum + i + n / i;
            else
                sum = sum + i;
        }
    }
    // If sum of divisors is equal to
    // n, then n is a perfect number
    if (sum == n && n != 1)
        return true;
 
    return false;
}
 
// Driver program
static void Main()
{
    System.Console.WriteLine("Below are all perfect" +
                                "numbers till 10000");
    for (int n = 2; n < 10000; n++)
        if (isPerfect(n))
            System.Console.WriteLine( n +
                    " is a perfect number");
}
}
 
// This code is contributed by chandan_jnu

PHP

<?php
// PHP program to check if a given number
// is perfect or not
 
// Returns true if n is perfect
function isPerfect($n)
{
    // To store sum of divisors
    $sum = 1;
 
    // Find all divisors and add them
    for ($i = 2; $i * $i <= $n; $i++)
    {
        if ($n % $i == 0)
        {
            if($i * $i != $n)
                $sum = $sum + $i + (int)($n / $i);
            else
                $sum = $sum + $i;
        }
    }
    // If sum of divisors is equal to
    // n, then n is a perfect number
    if ($sum == $n && $n != 1)
        return true;
 
    return false;
}
 
// Driver Code
echo "Below are all perfect numbers till 10000\n";
for ($n = 2; $n < 10000; $n++)
    if (isPerfect($n))
        echo "$n is a perfect number\n";
 
// This code is contributed by mits
?>

Javascript

<script>
 
// Javascript program to check if a given number is perfect
// or not
 
// Returns true if n is perfect
function isPerfect(n)
{
    // To store sum of divisors
    sum = 1;
 
    // Find all divisors and add them
    for (let i=2; i*i<=n; i++)
    {
        if (n%i==0)
        {
            if(i*i!=n)
                sum = sum + i + n/i;
            else
                sum=sum+i;
        }
    }
    // If sum of divisors is equal to
    // n, then n is a perfect number
    if (sum == n && n != 1)
        return true;
 
    return false;
}
 
// Driver program
  
    document.write("Below are all perfect numbers till 10000" + "<br>");
    for (let n =2; n<10000; n++)
        if (isPerfect(n))
            document.write(n + " is a perfect number" + "<br>");
 
// This code is contributed by Mayank Tyagi
 
</script>

Producción: 
 

Below are all perfect numbers till 10000
6 is a perfect number
28 is a perfect number
496 is a perfect number
8128 is a perfect number

Complejidad del tiempo: O(√n)

Espacio auxiliar: O(1)
A continuación se presentan algunos datos interesantes sobre los números perfectos: 
1) Todo número par perfecto tiene la forma 2 p ?1 (2 p  ? 1) donde 2 p  ? 1 es primo. 
2) Se desconoce si existen números perfectos impares.
Referencias:  
https://en.wikipedia.org/wiki/Perfect_number
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *