如果一个两位数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如13. 给定两个正整数 A,B,请求出大于等于 A小于等于B的所有绝对素数。 输入 1行,包含两个正整数 A 和 B 输出若干行,每行一个绝对素数,从小到大输出
时间: 2023-12-01 18:02:58 浏览: 105
以下是 Python 的代码实现,使用了筛法求素数:
```python
def sieve(n):
is_prime = [True] * (n + 1) # 初始化为全是素数
is_prime[0] = is_prime[1] = False # 0 和 1 不是素数
for i in range(2, n + 1):
if is_prime[i]: # 如果 i 是素数,将其倍数全部标记为非素数
for j in range(i * 2, n + 1, i):
is_prime[j] = False
return is_prime
def is_absolute_prime(n):
a = n // 10 # 十位数
b = n % 10 # 个位数
rev = b * 10 + a # 反转后的数字
return is_prime[n] and is_prime[rev] # 判断是否为绝对素数
m, n = map(int, input().split())
is_prime = sieve(n) # 筛出 n 以内的素数
for i in range(m, n + 1):
if i >= 10 and is_absolute_prime(i):
print(i) # 输出绝对素数
```
希望能对你有所帮助!
相关问题
如果一个两位数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如 13. 给定两个正整数 A、B,请求出大于等于A小于等于B的所有绝对素数。 输入 输入1行,包含两个正整数A和B 输出 若干行,每行一个绝对素数,从小到大输出。C++
以下是 C++ 的代码实现:
```c++
#include <iostream>
using namespace std;
bool isPrime(int n) { // 判断素数的函数
if (n <= 1) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
int reverse(int n) { // 将数字翻转的函数
int res = 0;
while (n > 0) {
res = res * 10 + n % 10;
n /= 10;
}
return res;
}
int main() {
int A, B;
cin >> A >> B;
for (int i = A; i <= B; i++) {
if (isPrime(i) && isPrime(reverse(i))) { // 判断是否为绝对素数
cout << i << endl;
}
}
return 0;
}
```
首先通过 `isPrime` 函数判断一个数是否为素数,然后通过 `reverse` 函数将数字翻转,最后在主函数中遍历给定范围内的所有数字,判断是否为绝对素数并输出。
如果一个两位数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如 。 给定两个正整数 、 ,请求出大于等于 、小于等于 的所有绝对素数。 输入 输入 行,包含两个正整数 和 。保证 。 输出 若干行,每行一个绝对素数,从小到大输出。C++
以下是 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 (isAbsolutePrime(i)) {
cout << i << '\n'; // 输出绝对素数
}
}
return 0;
}
```
希望能对你有所帮助!
阅读全文