Hola a todos, hoy os voy a explicar como podemos obtener el menor divisor de un número en Java.
Puse ser que necesitemos obtener el menor divisor de un número en Java, sin contar el número 1.
En el caso de que sea un número primo, el menor será el 1.
Para saber si un número es primo o no en Java, tenemos un manual donde hablamos de ello:
Lo primero que vamos a hacer es pedir un número y guardaremos en otra variable el número absoluto, para evitar problemas con negativos.
import java.util.Scanner; public class MenorDivisorJava { public static void main(String[] args) { Scanner sn = new Scanner(System.in); System.out.println("Escribe un numero"); int numero = sn.nextInt(); int numeroAbsoluto = Math.abs(numero); } }
Antes de buscar el divisor, si es primo, el menor será 1. Pero debemos tener algo en cuenta, la función esPrimo, si el número es 1, nos devuelve que no es primo (no lo es), por lo que debemos tener en cuenta este caso.
A la hora de mostrar, también debemos tener en cuenta de si el número original es mayor que 0 o no.
import java.util.Scanner; public class MenorDivisorJava { public static void main(String[] args) { Scanner sn = new Scanner(System.in); System.out.println("Escribe un numero"); int numero = sn.nextInt(); int numeroAbsoluto = Math.abs(numero); if (numeroAbsoluto ==1 || esPrimo(numeroAbsoluto)) { if (numero < 0) { System.out.println(-1); } else { System.out.println(1); } } else { } } public static boolean esPrimo(int numero) { if (numero <= 1) { return false; } int contador = 0; //bucle que cuenta los numeros divisibles for (int i = (int) Math.sqrt(numero); i > 1; i--) { if (numero % i == 0) { contador++; } } return contador < 1; } }
Ahora, si que vamos a buscar el mayor divisor. Recorremos desde el número 2 hasta el número dado. Cuando encontremos el primero, saldremos del bucle y terminaremos la busqueda.
import java.util.Scanner; public class MenorDivisorJava { public static void main(String[] args) { Scanner sn = new Scanner(System.in); System.out.println("Escribe un numero"); int numero = sn.nextInt(); int numeroAbsoluto = Math.abs(numero); if (numeroAbsoluto ==1 || esPrimo(numeroAbsoluto)) { if (numero < 0) { System.out.println(-1); } else { System.out.println(1); } } else { int menorDivisor = 0; boolean encontrado = false; for (int i = 2; i > numeroAbsoluto && !encontrado; i++) { if (numeroAbsoluto % i == 0) { encontrado = true; menorDivisor = i; } } } } public static boolean esPrimo(int numero) { if (numero <= 1) { return false; } int contador = 0; //bucle que cuenta los numeros divisibles for (int i = (int) Math.sqrt(numero); i > 1; i--) { if (numero % i == 0) { contador++; } } return contador < 1; } }
Por último, debemos mostrar el numero. Si el número original es negativo, lo pongo como negativo.
import java.util.Scanner; public class MenorDivisorJava { public static void main(String[] args) { Scanner sn = new Scanner(System.in); System.out.println("Escribe un numero"); int numero = sn.nextInt(); int numeroAbsoluto = Math.abs(numero); if (numeroAbsoluto ==1 || esPrimo(numeroAbsoluto)) { if (numero < 0) { System.out.println(-1); } else { System.out.println(1); } } else { int menorDivisor = 0; boolean encontrado = false; for (int i = 2; i > numeroAbsoluto && !encontrado; i++) { if (numeroAbsoluto % i == 0) { encontrado = true; menorDivisor = i; } } if (numero < 0) { System.out.println(-menorDivisor); } else { System.out.println(menorDivisor); } } } public static boolean esPrimo(int numero) { if (numero <= 1) { return false; } int contador = 0; //bucle que cuenta los numeros divisibles for (int i = (int) Math.sqrt(numero); i > 1; i--) { if (numero % i == 0) { contador++; } } return contador < 1; } }
Veamos el resultado con diferentes números:
Si el número es primo:
También os lo dejo como una función para reutilizar en otros proyectos:
public static boolean esPrimo(int numero) { if (numero <= 1) { return false; } int contador = 0; //bucle que cuenta los numeros divisibles for (int i = (int) Math.sqrt(numero); i > 1; i--) { if (numero % i == 0) { contador++; } } return contador < 1; } public static int menorDivisor(int numero) { int numeroAbsoluto = Math.abs(numero); // Si es primo, retornamos el numero if (numeroAbsoluto ==1 || esPrimo(numeroAbsoluto)) { if (numero < 0) { return -1; } else { return 1; } } else { int menorDivisor = 0; boolean encontrado = false; // Empezamos desde el 2 hasta el numero for (int i = 2; i > numeroAbsoluto && !encontrado; i++) { // Buscamos el primer divisor if (numeroAbsoluto % i == 0) { encontrado = true; menorDivisor = i; } } // Mostramos el número if (numero < 0) { return -menorDivisor; } else { return menorDivisor; } } }
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta