Павлюк Роман Сергеевич
13.10.2021 12:04 (28 д. 02:37)
[5478948]
#pragma once
#include <vector>
class PrimeNumberGenerator {
public:
explicit PrimeNumberGenerator(int start) : start(start <= 1 ? 2 : start) {}
int GetNextPrime() {
int end = this->start * 2 + 1;
std::vector<bool> matrix(end, false);
int p = 1;
while (true) {
for (int i = p + 1; i < end; ++i) {
if (!matrix[i]) {
p = i;
break;
}
}
if (p * p > end - 1) {
break;
}
int i = p;
while (i * p < end) {
matrix[i * p] = true;
i++;
}
}
for (int i = this->start; i < end; ++i) {
if (!matrix[i]) {
this->start = i + 1;
return i;
}
}
return this->start;
}
private:
int start;
};