问题描述:
The number 151 is a prime palindrome because it is both a prime number and a palindrome (it is the same number when read forward as backward). Write a program that finds all prime palindromes in the range of two supplied numbers a and b (5 <= a < b <= 1000,000,000); both a and b are considered to be within the range
输入格式:
m n
输出格式:
m到n之间的所有回文素数
5<=m<=n<=10^9
算法描述(C++):
#include<iostream>
#include<cmath>
#include <cstdlib>
using namespace std;
long long xa,xb,num,x;
int l1,l2,tot,way[10],le,ri;
void prime()
{
for (long long i = 2; i <= x; i++)
if (num % i == 0) return ;
cout << num << endl;
}
void data (int a)
{
if (a > ri)
{
for (int i = 1; i<= ri; i++)
way[tot-i+1] = way[i];
num = 0;
if (way[1] == 0 ) return;
for (int i = 1; i<= tot ; i++)
num = num*10 + way[i];
if (num > xb || num < xa) return ;
x = sqrt(num);
prime();
return;
}
for ( int i = 0; i<= 9; i++)
{
way[a] = i;
data(a+1);
}
}
int length( long long m)
{
int l = 0;
while (m != 0)
{
l++;
m = m / 10;
}
return l ;
}
int main()
{
//freopen("lab.in","r",stdin);
//freopen("lab.out","w",stdout);
cin >> xa;
cin >> xb;
l1 = length(xa);
l2 = length(xb);
for ( tot = l1 ; tot <= l2; tot++)
{
le = 1;
ri = (tot + 1) / 2;
data(1);
}
return 0;
}