真正的素数 时间限制:1秒 内存限制:64M 题目描述 找出正整数 a 和 b 之间(a不大于b)的所有真正的素数。真正的素数:如果一个正整数X是素数,它的倒序数也是素数,那么它就是真正的素数。比如13是素数,31也是素数。 输入描述 输入两个数 a和 b,空格间隔,1 <= a <= b <= 100000。 输出描述 从小到大的输出大于等于a,小于等于b的真正的素数,以逗号分隔。如果没找到,就输出“No". 样例 输入 10 35 输出 11,13,17,31 c++代码
时间: 2024-04-21 10:22:14 浏览: 189
下面是一个实现的思路和示例的C++代码:
实现思路:
1. 首先,我们需要一个函数来判断一个数字是否为素数。可以使用一个循环从2到sqrt(n)的范围内检查能否整除该数字,如果存在能整除的数,则该数字不是素数。
2. 接下来,我们需要一个函数来判断一个数字的倒序数是否为素数。可以将数字转换为字符串,然后反转字符串并转换回数字,再调用素数判断函数来检查是否为素数。
3. 最后,我们在给定范围内遍历所有数字,对每个数字检查是否为真正的素数,如果是,则将其添加到结果中。
示例代码:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
bool isPrime(int num) {
if (num < 2) {
return false;
}
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
bool isReversePrime(int num) {
string str = to_string(num);
reverse(str.begin(), str.end());
int reverseNum = stoi(str);
return isPrime(reverseNum);
}
void findTruePrimes(int a, int b) {
vector<int> result;
for (int num = a; num <= b; num++) {
if (isPrime(num) && isReversePrime(num)) {
result.push_back(num);
}
}
if (result.empty()) {
cout << "No" << endl;
} else {
for (int i = 0; i < result.size(); i++) {
cout << result[i];
if (i != result.size() - 1) {
cout << ",";
}
}
cout << endl;
}
}
int main() {
int a, b;
cin >> a >> b;
findTruePrimes(a, b);
return 0;
}
```
这段代码会根据输入的范围a和b,找出其中的真正的素数,并按照从小到大的顺序输出,如果找不到任何真正的素数,则输出"No"。请注意,这只是一个简单的实现示例,可能无法处理非常大的范围。在实际应用中,可能需要对算法进行优化。
阅读全文