判断一个数是否为对称且不大于五位数的素数。输入描述:输入数据含有不多于 50 个的正整数 n(0<n< 32 2 )。输出描述:对于每个 n,如果该数是不大于五位数的对称素数,则输出“Yes”,否则 输出“No”。每个判断结果单独列一行。输入样例 11 101 272 输出样例 Yes Yes No
#include <iostream> using namespace std; bool isPrime(int n)//判断是否是素数 { if(n==1)return false;//1 不是素数 if(n!=2&&n%2==0)return false;//2 是素数,清除 2 的倍数 for(int i=3;i*i<=n;i=i+2)//2,3,5,7 是素数 { if(n%i==0)return false; } return true; } bool issym(int n) { //一位数的素数和 11 都算是对称的 if(n<12&&n!=10)return true; //三位数素数是否对称 if(n>100 && n<1000 && n/100==n)return true; //四位数的对称数,不可能是素数 //假设四位对称数 abba,即 1000a+100b+10b+a=1001a+110b=11(91a+10b) //具有因子 11,是合数 //判断五位素数是否对称 if(n>10000 && n/1000==n*10+n/10)return true; return false; } int main() { int n; while(cin>>n) { cout<<(n<100000 && issym(n) && isPrime(n)? "Yes\n":"No\n"); } return 0; }