#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 + 45 + 1, true);
prime[0] = prime[1] = false;
for (int i = 2; i <= this->start + 45; i++)
if (prime[i]) {
if (i * i <= this->start + 50) {
for (int j = i * 1ll * i; j <= this->start + 45; j += i) {
prime[j] = false;
}
}
}
for (cs = this->start; cs <= this->start + 45; cs++) {
if (prime[cs] == true) break;
}
this->start = cs+1;
return cs;
}
};