歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

題目內容:判斷一個數是否為對稱且不大於五位數的素數。
 
輸入描述:輸入數據含有不多於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