【题目描述】
找出正整数M和N之间(N不小于M)的所有真素数。
真素数的定义:如果一个正整数P为素数,且其反序也为素数,那么P就为真素数。
例如,11,13均为真素数,因为11的反序还是为11,13的反序为31也为素数。
【输入】
输入两个数M和N,空格间隔,1<=M<=N<=100000。
【输出】
按从小到大输出M和N之间(包括M和N)的真素数,逗号间隔。如果之间没有真素数,则输出No。
【输入样例】
10 35
【输出样例】
11,13,17,31
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int n)//判断是否是质数
{
if(n < 2)
return false;
for(int i = 2; i <= sqrt(n); ++i)
if(n % i == 0)
return false;
return true;
}
int rev(int n)//数字反序
{
int num = 0;
for(int a = n; a > 0; a /= 10)//数字拆分 前提n >= 1
num = num * 10 + a % 10;
return num;
}
int main()
{
int m, n;
cin >> m >> n;
bool hasShow = false;//是否已经有输出
for(int i = m; i <= n; ++i)
{
if(isPrime(i) && isPrime(rev(i)))//如果i和i的逆序的数字都是质数
{
if(hasShow == true)//如果已经输出过
cout << ',';
else
hasShow = true;
cout << i;
}
}
if(hasShow == false)//如果没有输出过
cout << "No";
return 0;
}