#pragma once
#include <vector>

class PrimeNumberGenerator {
 private:
    int start;
    int barion = 200;
    const int size = 3000000;
    bool arr[3000000];

 public:
    explicit PrimeNumberGenerator(int start) : start(start < 2 ? 2 : start) {
        arr[0] = arr[1] = false;
        for (int i = 0; i < size; arr[i++] = true) {}
        for (int i = 2; i * i< size; i++) {
            if (i * i <= size) {
                for (int j = i * i; j < size; j += i) {
                    arr[j] = false;
                }
            }
        }
    }
    int GetNextPrime() {
        int cs;

        for (cs = this->start; cs <= this->start + barion; cs++) {
            if (arr[cs] == true) break;
        }
        this->start = cs + 1;
        return cs;
    }
};