QMCPACK
PrimeNumberSet< UIntType > Struct Template Reference

class to generate prime numbers More...

+ Inheritance diagram for PrimeNumberSet< UIntType >:
+ Collaboration diagram for PrimeNumberSet< UIntType >:

Public Types

using result_type = UIntType
 

Public Member Functions

 PrimeNumberSet ()
 default constructor More...
 
result_type operator[] (size_t i) const
 
size_t size () const
 
bool get (UIntType offset, int n, std::vector< UIntType > &primes_add)
 add n new primes starting with an offset More...
 

Public Attributes

std::vector< UIntType > primes
 

Detailed Description

template<typename UIntType>
struct PrimeNumberSet< UIntType >

class to generate prime numbers

Definition at line 55 of file PrimeNumberSet.h.

Member Typedef Documentation

◆ result_type

using result_type = UIntType

Definition at line 57 of file PrimeNumberSet.h.

Constructor & Destructor Documentation

◆ PrimeNumberSet()

PrimeNumberSet ( )
inline

default constructor

Reserve space for primes and construct min_prime-lowest prime numbers excluding 2

Definition at line 68 of file PrimeNumberSet.h.

69  {
70  primes.reserve(2 * min_num_primes);
71  primes.push_back(3);
72  result_type largest = 3;
73  int n = min_num_primes;
74  while (n)
75  {
76  largest += 2;
77  bool is_prime = true;
78  for (int j = 0; j < primes.size(); j++)
79  {
80  if (largest % primes[j] == 0)
81  {
82  is_prime = false;
83  break;
84  }
85  else if (primes[j] * primes[j] > largest)
86  {
87  break;
88  }
89  }
90  if (is_prime)
91  {
92  primes.push_back(largest);
93  n--;
94  }
95  }
96  }
UIntType result_type
std::vector< UIntType > primes

Member Function Documentation

◆ get()

bool get ( UIntType  offset,
int  n,
std::vector< UIntType > &  primes_add 
)
inline

add n new primes starting with an offset

Parameters
offsetoffset of a set
nnumber of primes requested
primes_addcontains n prime numbers if successful
Returns
true, if successful

For i=[0,n), primes_add[i]=primes[offset+i]

Definition at line 110 of file PrimeNumberSet.h.

Referenced by RandomNumberControl::make_children(), RandomNumberControl::make_seeds(), RandomNumberControl::put(), and qmcplusplus::TEST_CASE().

111  {
112  offset = offset % max_prime_offset; //roll back
113  //have enough prime numbers, assign them in an array
114  if (n + offset + 1 < primes.size())
115  {
116  primes_add.insert(primes_add.end(), primes.begin() + offset, primes.begin() + offset + n);
117  return true;
118  }
119  UIntType largest = primes.back();
120  int n2add = offset + n - primes.size();
121  while (n2add > 0 && largest < max_prime)
122  {
123  largest += 2;
124  bool is_prime = true;
125  for (int j = 0; j < primes.size(); j++)
126  {
127  if (largest % primes[j] == 0)
128  {
129  is_prime = false;
130  break;
131  }
132  else if (primes[j] * primes[j] > largest)
133  {
134  break;
135  }
136  }
137  if (is_prime)
138  {
139  primes.push_back(largest);
140  n2add--;
141  }
142  }
143  if (n2add)
144  {
145  std::ostringstream o;
146  o << " PrimeNumberSet::get Failed to generate " << n2add << " prime numbers among " << n << " requested.";
147  APP_ABORT(o.str());
148  return false; //to make compiler happy
149  }
150  primes_add.insert(primes_add.end(), primes.begin() + offset, primes.begin() + offset + n);
151  return true;
152  }
std::vector< UIntType > primes
#define APP_ABORT(msg)
Widely used but deprecated fatal error macros from legacy code.
Definition: AppAbort.h:27

◆ operator[]()

result_type operator[] ( size_t  i) const
inline

Definition at line 98 of file PrimeNumberSet.h.

98 { return primes[i]; }
std::vector< UIntType > primes

◆ size()

size_t size ( void  ) const
inline

Definition at line 100 of file PrimeNumberSet.h.

Referenced by qmcplusplus::TEST_CASE().

100 { return primes.size(); }
std::vector< UIntType > primes

Member Data Documentation

◆ primes


The documentation for this struct was generated from the following file: