Reto al azar: 008

Actualmente tenemos 30 retos en nuestra base de datos. Accediendo al reto 8.

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:
31

Ejemplo de salida 1:
101

Ejemplo de entrada 2:
456789

Ejemplo de salida 2:
1003001

Aportar una solución

Tu nombre (si quieres que aparezca):
Tu web/blog (si quieres que incluyamos un enlace a ella):
Tu e-mail (no se mostrará; si quieres que te avisemos cuando esté publicado):
¿Eres humano? ¿Cuánto es 2 más 3?
Lenguaje
Fuente:

// 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;
    }
}