Numero perfecto en Java

Hola a todos, hoy os voy a explicar como podemos indicar si un número es perfecto o no.

Un número perfecto es un número natural que es igual a la suma de sus divisores propios positivos.

Por ejemplo, el 28 es un número perfecto: 28 = 1 + 2 + 4 + 7 + 14

Lo primero es pedir un número natural, es decir que sea mayor que 0.


import java.util.Scanner;

public class NumeroPerfecto {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int numero;
        do {

            System.out.println("Escribe un numero");
            numero = sc.nextInt();

            if (!(numero >= 0)) {
                System.out.println("Debes escribir un numero mayor que 0");
            }

        } while (!(numero >= 0));

    }
}


Ahora, debemos sumar de 1 hasta el número dividido entre 2, ya que mas del número dividido entre no encontraremos divisores.


import java.util.Scanner;

public class NumeroPerfecto {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int numero;
        do {

            System.out.println("Escribe un numero");
            numero = sc.nextInt();

            if (!(numero >= 0)) {
                System.out.println("Debes escribir un numero mayor que 0");
            }

        } while (!(numero >= 0));

        int suma = 0;

        for (int i = 1; i <= numero / 2; i++) {

            if (numero % i == 0) {
                suma += i;
            }

        }

    }
}

Para saber si es o no un número perfecto, con un simple if es suficiente:


import java.util.Scanner;

public class NumeroPerfecto {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int numero;
        do {

            System.out.println("Escribe un numero");
            numero = sc.nextInt();

            if (!(numero >= 0)) {
                System.out.println("Debes escribir un numero mayor que 0");
            }

        } while (!(numero >= 0));

        int suma = 0;

        for (int i = 1; i <= numero / 2; i++) {

            if (numero % i == 0) {
                suma += i;
            }

        }

        if (numero == suma) {
            System.out.println("Es un numero perfecto");
        } else {
            System.out.println("No es un numero perfecto");
        }

    }
}


Veamos un par de ejemplos:

Si lo queremos en forma de función, seria algo así:



public static boolean numeroPerfecto(int numero){

    if(numero < 1){
        return false;
    }

    int suma = 0;
    for (int i = 1; i <= numero / 2; i++) {
        if (numero % i == 0) {
            suma += i;
        }
    }

    return numero == suma;

}

Aqui el ejemplo completo:


import java.util.Scanner;

public class NumeroPerfecto {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int numero;
        do {

            System.out.println("Escribe un numero");
            numero = sc.nextInt();

            if (!(numero >= 0)) {
                System.out.println("Debes escribir un numero mayor que 0");
            }

        } while (!(numero >= 0));

        if (numeroPerfecto(numero)) {
            System.out.println("Es un numero perfecto");
        } else {
            System.out.println("No es un numero perfecto");
        }

    }

    public static boolean numeroPerfecto(int numero) {

        if (numero < 1) {
            return false;
        }

        int suma = 0;
        for (int i = 1; i <= numero / 2; i++) {
            if (numero % i == 0) {
                suma += i;
            }
        }

        return numero == suma;

    }

}


Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada.