Calcular los numeros emirp en JAVA
Un emirp es un número primo que al invertir sus dígitos obtienes un número primo diferente. Este tipo de números primos excluye los denominados primos palíndromos, ya que un número palíndromo invertido es el mismo número (el 101 es un primo palíndromo pero no es un emirp).
Teniendo claro la definición, reutilizando el código de las entradas anteriores Los numeros Primos en JAVA e Invertir numero entero en JAVA y teniendo en cuenta que tanto los números primos que son iguales normales e invertidos (palíndromos) como los primos de un dígito NO son emirp, podemos hacer este programa fácilmente.
Teniendo claro la definición, reutilizando el código de las entradas anteriores Los numeros Primos en JAVA e Invertir numero entero en JAVA y teniendo en cuenta que tanto los números primos que son iguales normales e invertidos (palíndromos) como los primos de un dígito NO son emirp, podemos hacer este programa fácilmente.
public class Emirp { public static void main(String[] args) { int desde = 1; int hasta = 1000; for(int i = desde; i <= hasta; i++) { if(i != invNum(i) && esPrimo(i) && esPrimo(invNum(i))) { System.out.println(i); } } } //Invierte los digitos de un numero public static int invNum(int n) { int nDigitos = Integer.toString(n).length(); int nInv = 0; if (nDigitos == 1) { return n; } else { for (int i = 0; i < nDigitos; i++) { if (i == 0) { nInv += (n % 10) * Math.round(Math.pow(10, (nDigitos - 1))); } else if (i == nDigitos - 1) { nInv += n / Math.round(Math.pow(10, (nDigitos - 1))); } else { nInv += (n / Math.round(Math.pow(10, i))) % 10 * Math.round(Math.pow(10, (nDigitos - 1 - i))); } } } if (nInv < 0) { return nInv / 10; } else { return nInv; } } //Comprueba si un numero es o no primo public static boolean esPrimo(int n) { for (int i = 2; i <= Math.sqrt(n); i++) { if (n % i == 0) { return false; } } return true; } }
Comentarios
Publicar un comentario
Si tenéis alguna duda o sugerencia, no dudéis en comentar. ;)