bool isPrime(int n) {
if (n <= 1) {
return false;
}
if (n <= 3) {
return true;
}
if (n % 2 == 0 || n % 3 == 0) {
return false;
}
for (int i = 5; i * i <= n; i = i + 6) {
if (n % i == 0 || n % (i + 2) == 0) {
return false;
}
}
return true;
}
class PrimeNumberGenerator {
public:
explicit PrimeNumberGenerator(int start) : current_number(start) {}
int GetNextPrime() {
if (current_number <= 1) {
return 2;
}
int current_prime = current_number;
bool prime_is_founded = false;
while (!prime_is_founded) {
current_prime++;
if (isPrime(current_prime)) {
prime_is_founded = true;
}
}
current_number = current_prime;
return current_prime;
}
private:
int current_number;
};