Advertisement
HwapX

Lowest prime palindrome greater than time

Sep 7th, 2015
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.48 KB | None | 0 0
  1. import java.util.Date;
  2.  
  3. public class PrimePalindrome{
  4.     protected static long reverseDigits(long num)
  5.     {
  6.         long rev_num = 0;
  7.         while(num > 0)
  8.         {
  9.             rev_num = (rev_num * 10) + (num % 10);
  10.             num = (long)(num * 0.1);
  11.         }
  12.         return rev_num;
  13.     }
  14.    
  15.     protected static long nextPalindrome(long n) {
  16.         n++;
  17.         long digits = 0;
  18.         long num = n;
  19.         do {
  20.             digits++;
  21.             num = (long)(num * 0.1);
  22.         } while(num > 0);
  23.        
  24.         long half = (long)(digits * 0.5);
  25.         long left = (long)(n * Math.pow(0.1, half));
  26.         long r_left = reverseDigits(left);
  27.         if(r_left % 2 == 0) {
  28.             long nn1 = (long)(n * Math.pow(0.1, digits-1)) + 1;
  29.             long nn2 = (long)Math.pow(10, digits-1);
  30.             return nextPalindrome(nn1 * nn2);
  31.         }
  32.         long p10h  = (long)Math.pow(10, half);
  33.         long right = n - (left * p10h);
  34.    
  35.         if(digits % 10 != 0) {
  36.             r_left = reverseDigits((long)(left * 0.1));
  37.            
  38.             if(r_left > right)
  39.                 return (long)(left * p10h) + r_left;
  40.             else {
  41.                 ++left;
  42.                 return (long)(left * p10h) + reverseDigits((long)(left * 0.1));
  43.             }
  44.         } else {
  45.             if(r_left > right)
  46.                 return (long)(left * p10h) + r_left;
  47.             else {
  48.                 ++left;
  49.                 return (long)(left * p10h) + reverseDigits(left);
  50.             }
  51.         }
  52.     }
  53.    
  54.     protected static boolean isPrime(long n) {  
  55.         if(n == 2)
  56.             return true;
  57.         else if (n == 3)
  58.             return true;
  59.         else if (n % 2 == 0)
  60.             return false;
  61.         else if (n % 3 == 0)
  62.             return false;
  63.            
  64.         long i = 5;
  65.         long c = 2;
  66.         while(i * i < n) {
  67.             if(n % i == 0)
  68.                 return false;
  69.             i += c;
  70.             c = 6 - c;
  71.         }
  72.                
  73.         return true;
  74.     }
  75.  
  76.      public static void main(String []args){
  77.         long t = (long)(System.currentTimeMillis() * 0.001);
  78.         System.out.printf("next prime palindrome of %d is ", t);
  79.        
  80.         long s = System.currentTimeMillis();
  81.        
  82.         do {
  83.             t = nextPalindrome(t);
  84.         } while(!isPrime(t));
  85.        
  86.         System.out.println(t);
  87.         System.out.printf("elapsed %d milliseconds", System.currentTimeMillis() - s);
  88.      }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement