时间限制: 1000 ms 内存限制: 65536 KB
提交数: 33983 通过数: 13478
【题目描述】
找出正整数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
【答题思路】
利用for循环求出每一个数,在列一个函数求i是不是质数,然后在列一个函数用来让i倒序,最后列个判断就可以了,但要注意,还需要一个变量用来计数,如果为0,就要输出“No”,还有就是要注意逗号的输出。可以判断一下。
【程序如下】
#include <bits/stdc++.h>
using namespace std;int f(int n) {//找质数函数
if (n <= 2)
return 0;
for (int i = 2; i <= n / 2; i++) {
if (n % i == 0)
return 0;
}
return 1;
}int w(int n) {//倒序函数
int num = 0;
for (int i = n; i > 0; i /= 10) {
num = num * 10 + i % 10;
}
return num;
}int main() {
int n, m, q = 0, k = 0;
cin >> n >> m;
for (int i = n; i <= m; i++) {
if (f(w(i)) == 1 && f(i) == 1) {
k++;//计数
if (k == 1)//判断是否要输出逗号
cout << i;
else
cout << "," << i ;
}
}
if (k == 0)//否则输出“No”
cout << "No";return 0;
}