c++中试定义一个类NUM,求100以内所有的无暇素数。所谓无暇素数是指一个两位整数,其本身是素数,其逆序数也是素数。例如,17是素数,17的逆序数是71,17和71都是素数,所以17和71都是无暇素数.
时间: 2023-11-12 15:03:38 浏览: 81
下面是一个可能的解法:
```c++
#include <iostream>
using namespace std;
class NUM {
private:
int num;
bool is_prime(int n) { // 判断一个数是否为素数
if (n < 2) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
public:
NUM(int n) {
num = n;
}
bool is_holprime() { // 判断一个数是否为无暇素数
int rev = 0, n = num;
while (n > 0) {
rev = rev * 10 + n % 10;
n /= 10;
}
return is_prime(num) && is_prime(rev);
}
};
int main() {
for (int i = 10; i < 100; i++) {
NUM n(i);
if (n.is_holprime()) {
cout << i << " ";
}
}
cout << endl;
return 0;
}
```
代码中定义了一个名为 `NUM` 的类,其中有两个私有成员变量 `num` 和 `is_prime`,分别表示当前数字和判断一个数是否为素数的函数。其中 `is_prime` 函数使用了常见的素数判断方法:从 2 开始枚举到 $\sqrt{n}$,如果能整除则说明不是素数。
类中还有一个公有成员函数 `is_holprime`,用于判断一个数字是否为无暇素数。它首先将当前数字的逆序数计算出来,然后分别判断当前数字和逆序数是否为素数,并返回结果。
在 `main` 函数中,我们从 10 开始枚举到 99,对于每个数字都创建一个 `NUM` 对象,然后调用 `is_holprime` 函数判断是否为无暇素数,如果是,则输出该数字。
阅读全文