#pragma once
#include <vector>
class PrimeNumberGenerator {
private:
int start;
public:
explicit PrimeNumberGenerator(int start): start(start < 2 ? 2 : start) {}
int GetNextPrime() {
int cs;
std::vector<char>prime(this->start + 4 + 1, true);
prime[0] = prime[1] = false;
for (int i = 2; i <= this->start + 4; i++)
if (prime[i]) {
if (i * i <= this->start + 4) {
for (int j = i * 1ll * i; j <= this->start + 4; j += i) {
prime[j] = false;
}
}
}
for (cs = this->start; cs <= this->start + 4; cs++) {
if (prime[cs] == true) break;
}
this->start = cs+1;
return cs;
}
};