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.
Deja una respuesta