题目
1.建立一个类PrimeNUM,求指定数据范围内的所有素数(质数)。具体要求如下:
(1)私有数据成员
int data[25]:依次存放在指定范围内求出的所有素数。
int low,high:存放指定的数据范围的下限和上限。
int num:存放low与high之间的素数个数。
(2)公有成员函数
PrimeNUM(int _low,int _high):构造函数,用参数_low和_high初始化low和high,同时初始化num。
int isprime(int x):判断x是否为素数。若是素数,返回1;否则,返回0。
void process():求指定范围内的所有素数,把它们依次存放在数组data中,并将求出的素数个数赋给num。
void print():输出求出的素数个数及所有素数,每行输出5个素数。
(3) 在主函数中对该类进行测试。
定义一个PrimeNUM类的对象test,指定查找范围为100~150,即求100至150之间的所有素数。
通过test调用成员函数完成求素数及输出素数的工作。本题正确的输出结果应为:
num=10
101 103 107 109 113
127 131 137 139 149
代码
#include <iostream>
using namespace std;
class PrimeNUM
{
public:
PrimeNUM(int low = 0, int high = 0);
bool isprime(int x);
void process();
void print();
private:
int data[25];
int low;
int high;
int num;
};
PrimeNUM::PrimeNUM(int low, int high)
{
this->low = low;
this->high = high;
num = 0;
for (int i = 0; i < 25; i++)
{
data[i] = 0;
}
}
bool PrimeNUM::isprime(int x)
{
if (x <= 1)
{
return false;
}
if (x == 2)
{
return true;
}
else
{
for (int i = 2; i < x; i++)
{
if (x % i == 0)
{
return false;
}
}
return true;
}
}
void PrimeNUM::process()
{
if (high > 2)
{
int n;
if (low <= 2)
{
data[0] = 2;
n = 1;
for (int i = low; i <= high; i++)
{
int j;
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
break;
}
if (j == i - 1)
{
data[n] = i;
num++;
n++;
}
}
}
}
else
{
n = 0;
for (int i = low; i <= high; i++)
{
int j;
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
break;
}
if (j == i - 1)
{
data[n] = i;
num++;
n++;
}
}
}
}
}
}
void PrimeNUM::print()
{
int i = 0;
cout << "素数的个数: " << num << endl;
while (data[i] != 0)
{
if (i % 5 == 0)
{
printf("\n");
}
cout << data[i] << " ";
i++;
}
cout << endl;
}
int main()
{
PrimeNUM test(100, 150);
#if 0
int i ;
cout << "请输入一个数:";
cin >> i;
if(test.isprime (i))
{
cout << i << "是素数" << endl;
}
else
{
cout << i << "不是素数" << endl;
}
#endif
test.process();
test.print();
return 0;
}