如果一个两位数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如13. 给定两个正整数 A,B,请求出大于等于 A小于等于B的所有绝对素数。 输入 1行,包含两个正整数 A 和 B 输出若干行,每行一个绝对素数,从小到大输出C++
时间: 2023-12-01 16:02:58 浏览: 82
一个素数,当她的数字位置对换以后仍为素数,这样的数称为绝对素数。
5星 · 资源好评率100%
以下是 C++ 的代码实现,使用了筛法求素数:
```c++
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 100;
bool isPrime[MAXN]; // 是否是素数
void sieve(int n) {
memset(isPrime, true, sizeof(isPrime)); // 初始化为全是素数
isPrime[0] = isPrime[1] = false; // 0 和 1 不是素数
for (int i = 2; i <= n; i++) {
if (isPrime[i]) { // 如果 i 是素数,将其倍数全部标记为非素数
for (int j = i * 2; j <= n; j += i) {
isPrime[j] = false;
}
}
}
}
bool isAbsolutePrime(int n) {
int a = n / 10; // 十位数
int b = n % 10; // 个位数
int rev = b * 10 + a; // 反转后的数字
return isPrime[n] && isPrime[rev]; // 判断是否为绝对素数
}
int main() {
int m, n;
cin >> m >> n;
sieve(n); // 筛出 n 以内的素数
for (int i = m; i <= n; i++) {
if (i >= 10 && isAbsolutePrime(i)) {
cout << i << '\n'; // 输出绝对素数
}
}
return 0;
}
```
希望能对你有所帮助!
阅读全文