Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Date;
- public class PrimePalindrome{
- protected static long reverseDigits(long num)
- {
- long rev_num = 0;
- while(num > 0)
- {
- rev_num = (rev_num * 10) + (num % 10);
- num = (long)(num * 0.1);
- }
- return rev_num;
- }
- protected static long nextPalindrome(long n) {
- n++;
- long digits = 0;
- long num = n;
- do {
- digits++;
- num = (long)(num * 0.1);
- } while(num > 0);
- long half = (long)(digits * 0.5);
- long left = (long)(n * Math.pow(0.1, half));
- long r_left = reverseDigits(left);
- if(r_left % 2 == 0) {
- long nn1 = (long)(n * Math.pow(0.1, digits-1)) + 1;
- long nn2 = (long)Math.pow(10, digits-1);
- return nextPalindrome(nn1 * nn2);
- }
- long p10h = (long)Math.pow(10, half);
- long right = n - (left * p10h);
- if(digits % 10 != 0) {
- r_left = reverseDigits((long)(left * 0.1));
- if(r_left > right)
- return (long)(left * p10h) + r_left;
- else {
- ++left;
- return (long)(left * p10h) + reverseDigits((long)(left * 0.1));
- }
- } else {
- if(r_left > right)
- return (long)(left * p10h) + r_left;
- else {
- ++left;
- return (long)(left * p10h) + reverseDigits(left);
- }
- }
- }
- protected static boolean isPrime(long n) {
- if(n == 2)
- return true;
- else if (n == 3)
- return true;
- else if (n % 2 == 0)
- return false;
- else if (n % 3 == 0)
- return false;
- long i = 5;
- long c = 2;
- while(i * i < n) {
- if(n % i == 0)
- return false;
- i += c;
- c = 6 - c;
- }
- return true;
- }
- public static void main(String []args){
- long t = (long)(System.currentTimeMillis() * 0.001);
- System.out.printf("next prime palindrome of %d is ", t);
- long s = System.currentTimeMillis();
- do {
- t = nextPalindrome(t);
- } while(!isPrime(t));
- System.out.println(t);
- System.out.printf("elapsed %d milliseconds", System.currentTimeMillis() - s);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement