【问题描述】试定义一个类NUM,求100以内所有的无暇素数。所谓无暇素数是指其本身是素数,其逆序数也是素数。例如,3为素数,且它的逆序数是它本身,所以3是无暇素数;17是素数,17的逆序数是71,17和71都是素数,所以17和71都是无暇素数。具体要求如下:
(1) 私有数据成员
int a[20]; 整型数组,用来存储100以内的无暇素数。
int count; 整型变量,记录找到的无暇素数的个数。
(2) 公有成员函数
NUM(); 构造函数,将count初始化为0。
int reverse( int n); 求取并返回n的逆序数。
int isPrime(int n); 判断n是否为素数,若是素数返回1,否则返回0。
void fun(); 求100以内的所有无暇素数并存储在数组a中。
void print(); 输出100以内的无暇素数的总个数和每个无暇素数。
(3) 在主函数中对NUM类进行测试。
【输入形式】无
【输出形式】输出100以内的无暇素数的个数和大小。
【样例输入】
【样例输出】
count=13
2 3 5 7 11 13 17 31 37 71 73 79 97
【样例说明】
【评分标准】
代码如下:
#include<bits/stdc++.h>
using namespace std;
class NUM {
private:
int a[20];
int count;
public:
NUM() : count(0) {}
int reverse(int n) {
int rev = 0;
while (n > 0) {
rev = rev * 10 + n % 10;
n /= 10;
}
return rev;
}
int isPrime(int n) {
if (n <= 1) {
return 0;
}
for (int i = 2; i * i <= n; ++i) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
void fun() {
for (int i = 2; i < 100; ++i) {
if (isPrime(i) && isPrime(reverse(i))) {
a[count++] = i;
}
}
}
void print() {
cout << "count=" << count << endl;
for (int i = 0; i < count; ++i) {
cout << a[i] << " ";
}
cout << endl;
}
};
int main() {
NUM num;
num.fun();
num.print();
return 0;
}