给定一组连续的整数(例如2到100000),要求输出所有回文素数,大致思路有以下两种:

第一,先判断是否素数,再判断是否回文(不推荐)。如果是指定列举从2到某个数范围内的回文素数,可以考虑先用筛选法(http://www.cppblog.com/amazon/archive/2009/06/20/88107.html)挑选出所有素数,然后利用翻转法逐个判断是否回文,翻转法如下:
bool check(long a)
{
long b=0,temp=a;   //用b保存逆转后的数,temp保存输入的值,最后用来和b比较
while(a>0)
    
{                  //把a的值自右向左逐位取出,自左至右地加到b上
        b*=10;
        b
+=a%10;
      a
/=10;
    }

    
return b==temp;    //若相等则返回true.
}

第二,先构造回文,再判断是否素数(推荐)。可以先构造所有回文素数,然后根据判断是否素数(http://www.cppblog.com/amazon/archive/2009/06/20/88107.html)。构造回文素数的方法又有两种:
(1)
三位回文数公式如下:
for(a[0]=1;a[0]<10;a[0]+=2)
               for(a[1]=0;a[1]<10;a[1]++)
                          n=101*a[0]+10*a[1];
五位回文数公式如下:
for(a[0]=1;a[0]<10;a[0]+=2)
            for(a[1]=0;a[1]<10;a[1]++)
                      for(a[2]=0;a[2]<10;a[2]++)
                             n=a[0]*10001+a[1]*1010+a[2]*100;
注意,偶数个位的回文素数必然是合数,因为可以被11整除(11除外),且各位是偶数的回文素数也必然是合数,因为可以被2整除。
(2)
使用枚举+翻转的方法,例如12翻转后变成121,123翻转后变成12321,务必保持奇数个位,且最高位是偶数的话不必翻转即可判断为合数。
int Make(int data)
{
    
int result;
 
    result 
= data;
    
while((data /= 10!= 0)
    
{
        result 
= result * 10 + data % 10;
    }

 
    
return result;
}