/**
 * ACM Training 2009
 * ACM Problem #10235 - Emirp
 * Link:
 *
 * @author Felix Dietrich
 * @version 1.0, 09/21/2009
 *
 * Methode: Sieve of Eratosthenes
 * Status : Accepted
 * Runtime: 0.760
 */

import java.util.*;

public class Main
{
    // Calculate all prime numbers in the range 1 to MAX_PRIME
    // using the sieve of Eratosthenes.
    // numbers in the "numbers" array that are not prime are are set to -1.
    static final int MAX_PRIME = 1000000;
    static int[] numbers = new int[MAX_PRIME + 5];

    private static void generatePrimes()
    {
        numbers[0] = -1;
        numbers[1] = -1;
        for (int i = 2; i <= MAX_PRIME + 1; i++) {
            if (numbers[i] >= 0) {
                numbers[i] = i;
                for (int k = 2; k * i <= MAX_PRIME + 1; k++) {
                    numbers[k * i] = -1;
                }
            }
        }
    }

    public static void main(String... s)
    {
        Scanner sc = new Scanner(System.in);
        generatePrimes();
        StringBuilder sb;
        int n,nReversed;
        while(sc.hasNext())
        {
            n = sc.nextInt();
            
            if(numbers[n] == -1)
                System.out.println(n + " is not prime.");
            else
            {
                sb = new StringBuilder(Integer.toString(n));
                nReversed = Integer.parseInt(sb.reverse().toString());
                if(numbers[nReversed] == -1 || n == nReversed)
                    System.out.println(n + " is prime.");
                else
                    System.out.println(n + " is emirp.");
            }
        }
    }
}

2.

/**
 * Angewandte Mathematik, SS09, IFB 2C
 * ACM Problem 10235 - Simply Emirp
 * Link: http://icpcres.ecs.baylor.edu/onlinejudge/index.php?option=com_onlinejudge&Itemid=8&category=14&page=show_problem&problem=1176
 * @author Miesel Christoph
 * @author Seilbeck Robert
 * @author Wolfram Andre
 * @version 1.0 25.03.2009
 *
 * Status : Accepted
 * Runtime: 0.630
 */

import java.io.*;


public class Main{
    
    static boolean primzahltest(int aNumber)
    {
    boolean isPrim = true;
    if(aNumber==2) isPrim = true;
    else
    {
        double limit = Math.sqrt(aNumber);
        if(aNumber%2==0) isPrim = false;
        for(int i = 3; i<=limit; i+=2)
            {
            if(aNumber%i==0) isPrim = false;
            }
    }
    return isPrim;
    }
    
    
    public static void main(String[] args) throws Exception
    {
        
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String line = reader.readLine();
        int input = -1;
        int revert = 0;
        while(line!=null)
        {
            
            input = Integer.parseInt(line);
            int tmp = input;
            while(tmp != 0)
            {
                revert = revert * 10 + tmp % 10;
                tmp /= 10;
                
            }
        if(primzahltest(input) && primzahltest(revert) && input != revert)
            System.out.println(input+" is emirp.");
        else {
            if(!primzahltest(input)) System.out.println(input+" is not prime.");
            else System.out.println(input+" is prime.");
            }
        line = reader.readLine();
        revert = 0;
        }
        }
    }

3.