A palindromic prime (palprime) is a prime number that is also palindromic. So out of curiosity I wrote a simple program a few days ago that can find the palindromic numbers within a given range. Here is the code in C++:
#include <stdio.h> #include <stdlib.h> #include <limits.h> #include <math.h> #include <iostream> using namespace std; bool IsPrime(unsigned long long n) { bool r = true; for (unsigned long long i = 3; i < sqrt((double) n) + 1; i+= 2) { if (n % i ==0) { r = false; break; } } return r; } bool IsPalindrome(unsigned long long n) { bool r = true; char s[30]; int l = sprintf(s, "%llu", n); if (l == 1 && n != 1) { r = true; } else { for (int i = 0; i < l/2; i++) { if (s[i] != s[l-i-1]) { r = false; break; } } } return r; } /* * usage: palprime [lbound] [ubound] */ int main(int argc, char** argv) { unsigned long long beginNum = 3; unsigned long long endNum = 3; if (argc == 2) { // lbound default to 3 #ifdef _WIN32 endNum = _strtoui64(argv[1], NULL, 10); #else endNum = strtoull(argv[1], NULL, 10); #endif } else if (argc == 3) { #ifdef _WIN32 beginNum = _strtoui64(argv[1], NULL, 10); endNum = _strtoui64(argv[2], NULL, 10); #else beginNum = strtoull(argv[1], NULL, 10); endNum = strtoull(argv[2], NULL, 10); #endif } unsigned long long i = beginNum; while (i < endNum) { char s[30]; int l = sprintf(s, "%llu", i); //length cannot be even as even length palindrome numbers //can be divided by 11. if (l % 2 == 0) { i = ((unsigned long long) (i / 10)) * 100 + 1; continue; } if (IsPalindrome(i)) { if (IsPrime(i)) { cout << i << endl; } } i+=2; if (s[0] % 2 == 0) { i+=pow(10, l-1); //leading/ending number cannot be 5 if (((int) (s[0] - '0')) + 1 == 5) { i += 2 * pow(10, l-1); } } } return (EXIT_SUCCESS); }
At first, I was trying to find all the palprimes that can be represented by 64 bit integers. But soon I realized that it would take months to do so using the code above with a quad-core PC (using 4 processes with different ranges). Anyway, here’s the last few palindromic primes less than 10,000,000,000,000:
9999899989999
9999901099999
9999907099999
9999913199999
9999919199999
9999938399999
9999961699999
9999970799999
9999980899999
9999987899999
And here are a few interesting ones:
11357975311
1112345432111
1300000000031
1700000000071
1900000000091
7900000000097
9200000000029
1357900097531