18 #ifndef QMCPLUSPLUS_PRIME_NUMBER_SET_H 19 #define QMCPLUSPLUS_PRIME_NUMBER_SET_H 24 template<
typename UIntType>
35 min_num_primes = 4096,
36 max_prime_offset = 779156
46 max_prime = 3037000501U,
47 min_num_primes = 55108,
48 max_prime_offset = 146138719U
54 template<
typename UIntType>
70 primes.reserve(2 * min_num_primes);
73 int n = min_num_primes;
78 for (
int j = 0; j <
primes.size(); j++)
80 if (largest %
primes[j] == 0)
110 inline bool get(UIntType offset,
int n, std::vector<UIntType>& primes_add)
112 offset = offset % max_prime_offset;
114 if (
n + offset + 1 <
primes.size())
116 primes_add.insert(primes_add.end(),
primes.begin() + offset,
primes.begin() + offset +
n);
119 UIntType largest =
primes.back();
120 int n2add = offset +
n -
primes.size();
121 while (n2add > 0 && largest < max_prime)
124 bool is_prime =
true;
125 for (
int j = 0; j <
primes.size(); j++)
127 if (largest %
primes[j] == 0)
139 primes.push_back(largest);
145 std::ostringstream o;
146 o <<
" PrimeNumberSet::get Failed to generate " << n2add <<
" prime numbers among " <<
n <<
" requested.";
150 primes_add.insert(primes_add.end(),
primes.begin() + offset,
primes.begin() + offset +
n);
class to generate prime numbers
PrimeNumberSet()
default constructor
result_type operator[](size_t i) const
std::vector< UIntType > primes
#define APP_ABORT(msg)
Widely used but deprecated fatal error macros from legacy code.