當前位置:才華齋>計算機>C語言>

C語言可逆素數教程

C語言 閱讀(1.74W)

引導語:可逆素數是一個素數將其各位數字的順序倒過來構成的反序數也是素數。以下是本站小編分享給大家的C語言可逆素數教程,歡迎參考學習!

C語言可逆素數教程

求四位的可逆素數。可逆素數指:一個素數將其各位數字的順序倒過來構成的反序數也是素數。

 *問題分析與演算法設計

本題的重點不是判斷素數的方法,而是求一個整數的`反序數。求反序數的方法是從整數的末尾依次擷取最後一位數字,每擷取一次後整數縮小10倍,將擷取的數字作為新的整數的最後一位(新的整數擴大10倍後加上被擷取的數字)。這樣原來的整數的數字從低到高被不斷地擷取,依次作為新的整數從高到低的各位數字。

*程式說明與註釋

#include

#include

int num(int number);

int ok(int number);

int main()

{

int i,count;

printf("There are invertable primes with 4 digits: n");

for(count=0,i=1001;i<9999;i+=2) //窮舉全部的奇數

{

if(num(i)) //若是可逆素數,則輸出

printf(count%9 ? "%3d:%d" : "%3d:%dn",++count,i);

}

return 0;

}

int num(int number)

{

int i,j;

if(!ok(number))return 0; //判斷是否為素數

for(i=number,j=0;i>0;i/=10) //按位將整數倒過來,產生反序數

{

j=j*10 + i%10;

}

if(number

{

if(!ok(i)) //判斷對應的反序數是否為可逆素數

{

return 0;

}

else

{

return 1; //若是可逆數素數,則返回1

}

}

else

{

return 0;

}

getchar();

return 0;

}

int ok(int number)

{

int i,j;

if(number%2 ==0) //判斷是否為素數

return 0;

j= sqrt((double)number) +1 ; //取整數的平方根為判斷的上限

for(i=3;i

{

if(number %i ==0) //若為素數則返回1,否則返回0

return 0;

}

return 1;

}

*思考題

求1000以內的孿生素數。孿生素數是指:若a為素數,且a+2也是素數,則素數a和a+2稱為孿生素數。