【问题描述】
找出正整数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 <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
bool prime(int x) { // 判断素数
if (x <= 1) {
return false;
}
for (int i=2; i<=sqrt(x); i++) {
if (x % i == 0) {
return false;
}
}
return true;
}
int reverse(int x) { // 求一个数的逆序数
int s = 0;
while (x != 0) {
s = s*10 + x%10;
x /= 10;
}
return s;
}
int main() {
int i, f = 0, a[100001], cnt=0;
memset(a, 0, sizeof(a));
int m, n;
cin >> m >> n;
for (i=m; i<=n; i++) { // 枚举从m~n的所有整数
if (prime(i) && prime(reverse(i))) { // 判断是否为真素数,如果是,将其存入数组a中
a[++cnt] = i;
f = true;
}
}
if (f) {
for (i=1; i<cnt; i++) {
cout << a[i] << ",";
}
cout << a[i];
} else {
cout << "No";
}
return 0;
}