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

第一,先判斷是否素數(shù),再判斷是否回文(不推薦)。如果是指定列舉從2到某個數(shù)范圍內(nèi)的回文素數(shù),可以考慮先用篩選法(http://www.shnenglu.com/amazon/archive/2009/06/20/88107.html)挑選出所有素數(shù),然后利用翻轉(zhuǎn)法逐個判斷是否回文,翻轉(zhuǎn)法如下:
bool check(long a)
{
long b=0,temp=a;   //用b保存逆轉(zhuǎn)后的數(shù),temp保存輸入的值,最后用來和b比較
while(a>0)
    
{                  //把a的值自右向左逐位取出,自左至右地加到b上
        b*=10;
        b
+=a%10;
      a
/=10;
    }

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

第二,先構(gòu)造回文,再判斷是否素數(shù)(推薦)。可以先構(gòu)造所有回文素數(shù),然后根據(jù)判斷是否素數(shù)(http://www.shnenglu.com/amazon/archive/2009/06/20/88107.html)。構(gòu)造回文素數(shù)的方法又有兩種:
(1)
三位回文數(shù)公式如下:
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];
五位回文數(shù)公式如下:
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;
注意,偶數(shù)個位的回文素數(shù)必然是合數(shù),因為可以被11整除(11除外),且各位是偶數(shù)的回文素數(shù)也必然是合數(shù),因為可以被2整除。
(2)
使用枚舉+翻轉(zhuǎn)的方法,例如12翻轉(zhuǎn)后變成121,123翻轉(zhuǎn)后變成12321,務(wù)必保持奇數(shù)個位,且最高位是偶數(shù)的話不必翻轉(zhuǎn)即可判斷為合數(shù)。
int Make(int data)
{
    
int result;
 
    result 
= data;
    
while((data /= 10!= 0)
    
{
        result 
= result * 10 + data % 10;
    }

 
    
return result;
}