#pragma once
#include <vector>
#include <limits>

class PrimeNumberGenerator {
public:
    explicit PrimeNumberGenerator(int start) {
        a.resize(INT16_MAX, true);
        a[0] = a[1] = false;
        for (int64_t i = 2; i < INT16_MAX; i++) {
            if (a[i]) {
                for (int64_t j = i * i; j < INT16_MAX && j > 0; j += i) {
                    a[j] = false;
                }
            }
        }
        it = start;
    }
    int GetNextPrime() {
        for (int64_t i = it; i < INT16_MAX; i++) {
            if (a[i]) {
                it = i + 1;
                return i;
            }
        }
    }

private:
    std::vector<bool> a;
    int64_t it;
};