Advertisement
Guest User

CH3 Emirps

a guest
Jun 20th, 2011
1,552
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.97 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.io.IOException;
  4. import java.util.LinkedList;
  5. import java.util.List;
  6.  
  7. /*
  8.  * Tuenti Contest
  9.  * Challenge 3 - Emirps
  10.  * Author: Pedro Antonio Pardal Jimena
  11.  * Email: pardal@alu.uma.es
  12.  */
  13.  
  14. public class Emirps
  15. {
  16.     private static boolean esPrimo( long n )
  17.     {
  18.         if ( n == 1 )
  19.             return false;
  20.         else if ( n < 4 )
  21.             return true;
  22.                  
  23.         long m = (long) Math.sqrt( n );
  24.        
  25.         for ( long i = 2; i <= m; i++ )
  26.         {
  27.             if ( n % i == 0 )
  28.                 return false;
  29.         }
  30.        
  31.         return true;
  32.     }
  33.    
  34.     private static List<Long> primosHasta( long n )
  35.     {
  36.         List<Long> primos = new LinkedList<Long>();
  37.        
  38.         for ( long i = 1; i <= n; i++ )
  39.         {
  40.             if ( esPrimo( i ) )
  41.                 primos.add( i );
  42.         }
  43.        
  44.         return primos;
  45.     }
  46.    
  47.     private static long reverse( long n )
  48.     {
  49.         String strn = String.valueOf( n );
  50.         StringBuffer b = new StringBuffer( strn );
  51.        
  52.         return Long.parseLong( b.reverse().toString() );
  53.     }
  54.    
  55.     private static long sumaEmirps( List<Long> primos, long max )
  56.     {
  57.         long result = 0;
  58.         for ( Long l : primos )
  59.         {
  60.             if ( l > max )
  61.                 break;
  62.            
  63.             long reversed = reverse( l );
  64.            
  65.             if ( l != reversed && primos.contains( reversed ) )
  66.                 result += l;
  67.         }
  68.         return result;
  69.     }
  70.    
  71.     private static long procesaEmirps( String linea )
  72.     {
  73.         long n = 0;
  74.        
  75.         try
  76.         {
  77.             n = Long.parseLong( linea );
  78.         }
  79.         catch ( NumberFormatException e )
  80.         {
  81.         }
  82.        
  83.         if ( n > 2 )
  84.         {
  85.             long tope = (long) Math.pow( 10, Math.ceil( Math.log10( n ) ) );
  86.             List<Long> primos = primosHasta( tope );
  87.            
  88.             return sumaEmirps( primos, n );    
  89.         }
  90.         else
  91.         {
  92.             return 0L;
  93.         }
  94.     }
  95.    
  96.     public static void main( String[] args ) throws IOException
  97.     {
  98.         BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );
  99.        
  100.         while ( reader.ready() )
  101.         {
  102.             String linea = reader.readLine();
  103.             long result = procesaEmirps( linea );
  104.            
  105.             System.out.println( result );
  106.         }
  107.     }
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement