建立一个类求指定数据范围内的所有素数提示素数的定义是只能被一和它本身整除的整除及质数编程要求私有数据成员公有成员函数
时间: 2023-10-07 19:05:07 浏览: 97
Python 2种方法求某个范围内的所有素数(质数)
好的,以下是一个用 C++ 实现的类,可以求指定数据范围内的所有素数:
```cpp
#include <vector>
#include <cmath>
class PrimeNumbers {
private:
std::vector<bool> isPrime; // 存储每个数是否为素数
public:
// 构造函数,初始化 isPrime
PrimeNumbers(int n) {
isPrime.resize(n + 1, true);
isPrime[0] = isPrime[1] = false;
for (int i = 2; i <= std::sqrt(n); ++i) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
}
// 判断一个数是否为素数
bool is_prime(int x) const {
return isPrime[x];
}
// 获取指定范围内的所有素数
std::vector<int> get_primes(int l, int r) const {
std::vector<int> primes;
for (int i = l; i <= r; ++i) {
if (isPrime[i]) {
primes.push_back(i);
}
}
return primes;
}
};
```
这个类中,私有数据成员 `isPrime` 是一个 `vector<bool>`,用来存储每个数是否为素数。在构造函数中,我们首先将所有数都标记为素数,然后从 2 开始遍历,如果当前数是素数,就将它的倍数都标记为非素数。
公有成员函数 `is_prime` 用来判断一个数是否为素数,它只需要返回 `isPrime[x]` 即可。
公有成员函数 `get_primes` 用来获取指定范围内的所有素数。它首先创建一个空的 `vector<int>`,然后遍历指定范围内的所有数,如果当前数是素数,就将它加入到 `primes` 中,并最终返回 `primes`。
阅读全文