給定一組連續的整數(例如2到100000),要求輸出所有回文素數,大致思路有以下兩種:

第一,先判斷是否素數,再判斷是否回文(不推薦)。如果是指定列舉從2到某個數范圍內的回文素數,可以考慮先用篩選法(http://www.shnenglu.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.shnenglu.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;
}