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