【题目描述】
找出正整数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
【代码】
[C++] 纯文本查看 复制代码 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
bool IsPrime(int num) {
if (num < 2) return false;
if (num % 2 == 0 && num > 2) return false;
for (int i = 3; i * i <= num; i += 2) {
if (num % i == 0) return false;
}
return true;
}
int intrev(int num) {
int result = 0;
while (num) {
result = result * 10 + num % 10;
num /= 10;
}
return result;
}
int main() {
int M, N;
bool print = false;
scanf("%d %d", &M, &N);
for (int i = M; i <= N; i++) {
if (IsPrime(i) && IsPrime(intrev(i))) {
if (print) {
putchar(',');
}
else {
print = true;
}
printf("%d", i);
}
}
if (!print) printf("No");
}
|