#pragma once class PrimeNumberGenerator { public: explicit PrimeNumberGenerator(int start) : start(start <= 1 ? 2 : start) {}; int GetNextPrime() { int end = this->start * 2 + 1; std::vector 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; };