1.8 五位以内的对称素数
1.8 题目内容
判断一个数是否为对称且不大于五位数的素数。
输入描述:输入数据含有不多于 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%10)return true;
//四位数的对称数,不可能是素数
//假设四位对称数 abba,即 1000a+100b+10b+a=1001a+110b=11(91a+10b)
//具有因子 11,是合数
//判断五位素数是否对称
if(n>10000 && n/1000==n%10*10+n/10%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;
}