Programa Java para verificar si un número dado es un número perfecto

Se dice que un número es un número perfecto si la suma de sus divisores propios (es decir, todos los divisores positivos excepto el propio número) es igual a ese número. La suma alícuota es la suma de los divisores de un número, excluyendo el número en sí. Por lo tanto, un número es un número perfecto solo si es igual a su suma alícuota. Todos los números perfectos conocidos son pares

Example 1:

n = 9
Proper Divisors of 9 are 1 and 3.
Sum = 1+3 = 4 ≠ 9
⇒ 9 is not a perfect number.

Example 2:

n = 6
Proper Divisors of 6 are 1, 2 and 3.
Sum = 1+2+3 = 6 = 6
⇒ 6 is a perfect number.

Example 3:

n = 28
Proper Divisors of 28 are 1, 2, 4, 7 and 14.
Sum = 1+2+4+7+14 = 28 = 28
⇒ 28 is a perfect number.

Example 4:

n = 15
Proper Divisors of 15 are 1,3 and 5.
Sum = 1+3+5 = 9 ≠ 15
⇒ 15 is not a perfect number.

Entonces, básicamente tenemos que encontrar la suma de los divisores propios de un número.

Enfoque 1:  

Una solución simple es pasar por cada número del 1 al n-1 y verificar si es un divisor y si lo es, luego agregarlo en la variable de suma y al final verificar si la suma es igual al número en sí, entonces es un número perfecto de lo contrario no.

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)
    {
        // 1 is not a perfect number
        if (n == 1)
            return false;
  
        // sum will store the sum of proper divisors
        // As 1 is a proper divisor for all numbers
        // initialised sum with 1
        int sum = 1;
  
        // Looping through the numbers to check if they are
        // divisors or not
        for (int i = 2; i < n; i++) {
            
            if (n % i == 0) {
                sum += i;
            }
            
        }
  
        // If sum of divisors is equal to
        // n, then n is a perfect number
        if (sum == n)
            return true;
  
        return false;
    }
  
    // Driver program
    public static void main(String[] args)
    {
        int n = 6;
        
        // Call isPerfect function to
        // check if the number is perfect or not.
        if (isPerfect(n))
            System.out.println(n + " is a perfect number");
        else
            System.out.println(
                n + " is not a perfect number");
    }
}
Producción

6 is a perfect number
  • Complejidad de tiempo: O(n)

Enfoque 2:

Una Solución Eficiente es recorrer los números hasta la raíz cuadrada de n. 

Si i es un divisor, entonces n/i también es un divisor. 

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)
    {
        // 1 is not a perfect number
        if (n == 1)
            return false;
  
        // sum will store the sum of proper divisors
        // As 1 is a proper divisor for all numbers
        // initialised sum with 1
        int sum = 1;
  
        // Looping through the numbers to check if they are
        // divisors or not
        for (int i = 2; i * i <= n; i++) {
            
            if (n % i == 0) {
                
                // n is a perfect square
                // let's take 25
                // we need to add 5 only once
                // sum += i + n / i will add it twice
                
                if (i * i == n)
                    sum += i;
                else
                    sum += i + (n / i);
            }
        }
  
        // If sum of divisors is equal to
        // n, then n is a perfect number
        
        if (sum == n)
            
            return true;
  
        return false;
    }
  
    // Driver program
    public static void main(String[] args)
    {
        int n = 6;
        
        // Call isPerfect function to
        // check if the number is perfect or not.
        if (isPerfect(n))
            
            System.out.println(n + " is a perfect number");
        
        else
            System.out.println(
                n + " is not a perfect number");
    }
}
Producción

6 is a perfect number

Complejidad del tiempo: O(√n)

Publicación traducida automáticamente

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