#pragma once

#include <iostream>
#include <cmath>

class PrimeNumberGenerator {
public:
    PrimeNumberGenerator(int start): start(start) {
        while (!Sieve()) {
            this->start = GetNextPrime();
        }
        prime = true;
	};

    bool Sieve() {
        if (start == 2 or start == 3) {
            return true;
        }
        else if (!(start % 2) or !(start % 3) or 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;
};