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. Los campos obligatorios están marcados con *