Retos - 008: Palíndromo primo

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 3 menos dos?
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;
    }
}
 

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