class PrimeNumberGenerator {
private:
int start;
public:
explicit PrimeNumberGenerator(int start);
int GetNextPrime();
};
PrimeNumberGenerator::PrimeNumberGenerator(int start) : start(start) {
}
bool isPrime(int n) {
if (n == 2)
return true;
if (n < 2 || n % 2 == 0)
return false;
for (int i = 3; i * i <= n; i += 2)
if (n % i == 0)
return false;
return true;
}
int next(int N) {
for (int i = N + 1; ; i++)
if (isPrime(i))
return i;
}
int PrimeNumberGenerator::GetNextPrime() {
int tmp;
if (isPrime(start)) {
tmp = start;
start = next(start);
return tmp;
}
start = next(start);
return start++;
}