#pragma once

#include <iostream>

class PrimeNumberGenerator {
 public:

    explicit PrimeNumberGenerator(int start) : start(start) {
        while (!Sieve()) {
            this->start = GetNextPrime();
        }
        prime = true;
    }
    bool Sieve() {
        if (start == 2 || start == 3) {
            return true;
        } else if (!(start % 2) || !(start % 3) || start == 1) {
            return false;
        }
        for (int div = 5; div <= sqrt(start); div += 2) {
            if (!(start % div)) {
                return false;
            }
        }
        return true;
    }
    int GetNextPrime() {
        if (prime) {
            prime = false;
            return start;
        }
        do {
            ++start;
        } while (!Sieve());
        return start;
    }

    int start;
    bool prime;
};