37#ifndef GTEST_SAMPLES_PRIME_TABLES_H_ 
   38#define GTEST_SAMPLES_PRIME_TABLES_H_ 
   59    if (n <= 1) 
return false;
 
   61    for (
int i = 2; i*i <= n; i++) {
 
   63      if ((n % i) == 0) 
return false;
 
 
   70    for (
int n = 
p + 1; n > 0; n++) {
 
 
 
   84      : is_prime_size_(max + 1), is_prime_(new bool[max + 1]) {
 
   85    CalculatePrimesUpTo(max);
 
 
   90    return 0 <= n && n < is_prime_size_ && is_prime_[n];
 
 
   94    for (
int n = 
p + 1; n < is_prime_size_; n++) {
 
   95      if (is_prime_[n]) 
return n;
 
 
  102  void CalculatePrimesUpTo(
int max) {
 
  103    ::std::fill(is_prime_, is_prime_ + is_prime_size_, 
true);
 
  104    is_prime_[0] = is_prime_[1] = 
false;
 
  108    for (
int i = 2; i*i <= max; i += i%2+1) {
 
  109      if (!is_prime_[i]) 
continue;
 
  114      for (
int j = i*i; 
j <= max; 
j += i) {
 
  115        is_prime_[
j] = 
false;
 
  120  const int is_prime_size_;
 
  121  bool* 
const is_prime_;
 
 
virtual bool IsPrime(int n) const
 
virtual int GetNextPrime(int p) const
 
virtual int GetNextPrime(int p) const
 
PreCalculatedPrimeTable(int max)
 
virtual ~PreCalculatedPrimeTable()
 
virtual bool IsPrime(int n) const
 
virtual bool IsPrime(int n) const =0
 
virtual int GetNextPrime(int p) const =0