Guest User

CH3 Emirps

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