引導語:可逆素數是一個素數將其各位數字的順序倒過來構成的反序數也是素數。以下是本站小編分享給大家的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稱爲孿生素數。