歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++判斷五位以內的對稱素數

C++判斷五位以內的對稱素數

日期:2017/3/1 9:51:48   编辑:Linux編程

題目內容:判斷一個數是否為對稱且不大於五位數的素數。

輸入描述:輸入數據含有不多於50個的正整數n(0<n<232)。

輸出描述:對於每個n,如果該數是不大於五位數的對稱素數,則輸出“Yes”,否則輸出“No”。每個判斷結果單獨列一行。

題目分析:

(1)判斷它是否是五位以內的數,即該數是否小於100000.

(2)判斷該數是否對稱,以下三種情況成立:該數是一位數或11;該數是三位數,即該數大於100且小於1000,且該數的百位數等於個位數;該數是五位數,即該數大於10000且前兩位等於後兩位的逆序,即該數除以1000的商等於個位數與十位數顛倒位置。因四位數的對稱數不可能是素數,所以不予考慮。

(3)判斷該數是否是素數。首先判斷該數是否是1,若是1則不是素數。然後判斷該數是否是非2的偶數,若是則非素數。最後從3開始,每次加2,直到其平方大於該數,判斷該數對其取余是否為0.若出現取余為0的情況,則該數非素數。

參考代碼:


#include <fstream>

#include <iostream>

using namespace std;

bool isPrime(int n)

{

if(n==1) return false;

if(n!=2&&n%2==0) return false;

for(int i=3;i*i<=n;i=i+2)

{

if(n%i==0) return false;

}

return true;

}

bool isSym(int n)

{

if(n<12&&n!=10) return true;

if(n>100&&n<1000&&n/100==n%10) return true;

if(n>10000&&n/1000==n%10*10+n/10%10) return true;

return false;

}

int main(int argc,char * argv[])

{

int n;

while(cin>>n)

{

cout<<(n<100000&&isSym(n)&&isPrime(n)?"Yes\n":"No\n");

}

system("pause");

return 0;

}

運行結果:

Copyright © Linux教程網 All Rights Reserved