Por Nacho Cabanes
Nivel de dificultad aproximado (1 a 5): 3
Un entero se dice que es un palíndromo si es igual al número que se obtiene al invertir el orden de sus cifras. Por ejemplo, 79197 y 324423 son palíndromos. En esta tarea se le dará un entero N, 1 <= N <= 1.000.000. Usted debe encontrar el menor entero M tal que M <= N que es primo y M es un palíndromo N.
Por ejemplo, si N es 31, entonces la respuesta es 101.
Formato de entrada:
Un solo entero N, (1 <= N <= 1.000.000), en una sola línea.
Formato de salida:
Su salida debe consistir en un solo número entero, el más pequeño palíndromo primo mayor que o igual a N.
(Asegúrate de que has leído las preguntas frecuentes antes de plantear tu solución)
Ejemplo de entrada 1:
31Ejemplo de salida 1:
101Ejemplo de entrada 2:
456789Ejemplo de salida 2:
1003001
// Ejemplo de solución para el reto 008 // (Olimpiadas indias de informática - 2004) // Por Gustavo Palacio // Palíndromo primo inmediatamente superior al número dado import java.util.Scanner; class PalindromoPrimo { public static void main(String [] args) { int n = 0; String x = ""; // (Según la especificación del problema, no se debe "avisar") // System.out.println("Introduzca Numero:"); Scanner entrada = new Scanner(System.in); n = Integer.parseInt(entrada.next()); for(int i=n;i<2000000;i++){ if(EsPalindromo(i)){ if(EsPrimo(i)) { System.out.println(i); break; } } } } static boolean EsPalindromo(int px) { int nn = px; String cadena_a= Integer.toString(nn); String cadena_b = ""; int tam = cadena_a.trim().length()-1; for(int j=tam;j >= 0;j--) { cadena_b = cadena_b + cadena_a.charAt(j); } if (cadena_a.equals(cadena_b)) return true; else return false; } static boolean EsPrimo(int pn){ int j = 0; for(int i = 1;i<=pn;i++) { if((pn % i) == 0) { j +=1; } if(j>2) { return false; } } return true; } }
// Reto 008: Palíndromo Primo // Ejemplo de solución en Java, por Jonathan Felix // 08-Septiembre-2015 import java.util.Scanner; public class PalindromoPrimo { public static int buscarPalindromoPrimo(int n) { if(n%2 == 0) n++; do { n += 2; } while(!esPalindromo(n) || !esPrimo(n)); return n; } public static boolean esPalindromo(int n) { return n == voltearDigitos(n); } public static int voltearDigitos(int n) { String str = String.valueOf(n); String strVolteados = ""; for(int i=str.length()-1; i>=0; i--) strVolteados += str.charAt(i); return Integer.parseInt(strVolteados); } public static boolean esPrimo(int n) { if(n%2 == 0) return false; for(int i=3; i<=n/2; i+=2) if(n%i == 0) return false; return true; } public static void main(String[] args) { Scanner leer = new Scanner(System.in); int numero = leer.nextInt(); System.out.println(buscarPalindromoPrimo(numero)); } }
// Reto 008: Palíndromo Primo // Solución en Java, por Nicolás Zukierman // 30-Ene-2017 import java.util.Scanner; public class PalindromoPrimo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num=sc.nextInt(); while(!(esPalindromo(num) && esPrimo(num))){ num++; } System.out.println(num); } private static boolean esPrimo(int num) { return divisoresMenores(num)==1; } private static int divisoresMenores(int num) { int cantDivisores=0; for (int i=1;i<num;i++){ if (num%i==0) cantDivisores++; } return cantDivisores; } private static boolean esPalindromo(int num) { String s = String.valueOf(num); return (s.equals((reversa(s)))); } private static String reversa(String s) { String reversa=""; for (int i=s.length()-1;i>=0;i--){ reversa+=String.valueOf(s.charAt(i)); } return reversa; } }