试定义一个类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类进行测试。
count=13
2 3 5 7 11 13 17 31 37 71 73 79 97
二、代码实现#include#include #include 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) { int temp=(int)sqrt(n); for(int i=2;i<=temp;i++) { if(n%i==0)return 0; } return 1; } void fun() { vector v; for(int i=2;i<=100;i++) { if(isPrime(i)&&isPrime(reverse(i))) { v.push_back(i); count++; } } int len=v.size(); for(int j=0;j a[j]=v[j]; } } void print() { printf("count=%dn",count); for(int i=0;i printf("%d ",a[i]); } } }; int main() { NUM num; num.fun(); num.print(); return 0; }



