An Interest In:
Web News this Week
- April 2, 2024
- April 1, 2024
- March 31, 2024
- March 30, 2024
- March 29, 2024
- March 28, 2024
- March 27, 2024
January 10, 2022 09:56 am GMT
Constructor: takes in
Original Link: https://dev.to/ra101/namespace-ra-random-prime-no-generator-2d8d
namespace ra :: Random Prime No. Generator
Aim:
To create a random number engine that generates prime number on the go! Here the link GitHub repo
Plan of Attack:
- Since finding prime number in constant time is impossible by the math at the moment, So We are going to use a database-based approach. Lets store all the prime number in
primeDB
file - Since
C++
already have random engines, Let us create a wrapper around that using templates
Objective:
- Container that takes in engine class and override all the engine functions, also takes in filepath for database
- Functions to override
-
()
-> returns random prime number -
min()
-> returns min prime number -
max()
-> returns max prime number -
<<
-> save the state tostd::stringstream
-
>>
-> restores the state fromstd::stringstream
-
Code:
Private Members:
template <typename Engine> Engine eng;
int min_prime;
int max_prime;
char const *db_filepath;
Public Members:
Constructor
int operator()();
friend stringstream &operator<<
friend stringstream &operator>>
Constructor: takes in seed
and filepath
#define DB_FILEPATH "primeDB"template <typename Engine>random_prime_engine<Engine>::random_prime_engine(unsigned long rand_seed, char const *db_filepath=DB_FILEPATH){ // Get DB path this->db_filepath = db_filepath; eng.seed(rand_seed);}
// Usagera::random_prime_engine<std::default_random_engine> rpe_2(rand_seed);
()
operator,
#define DB_SIZE 10000template <typename Engine>int random_prime_engine<Engine>::operator()(){ int idx = eng() % DB_SIZE; // to get a index within file int rand_prime; // Open the file std::ifstream file; file.open(db_filepath); // update rand_prime till it gets the value at index for (int i = 0; i <= idx; i++) file >> rand_prime; file.close(); return (rand_prime);}
// Usagestd::cout << rpe()
min and max
# pseudo code# initialize min/max with 0, for lazy initialization{ # return min or max if once found if bool(min/max): return min/max min = file.first_line max = file.last_line return min/max}
>>
and <<
// Friend Functions#define stringstream SSfunction SS &operator<>(SS&in/out, rpe){ in/out >> rpe.eng; return in/out}
// Usagestd::stringstream state;state << rpe; //save current statestate >> rpe; //restore old state
All the code can be found at the below link:
https://github.com/ra101/Random-Prime-Number-Generator-Engine-cpp
Original Link: https://dev.to/ra101/namespace-ra-random-prime-no-generator-2d8d
Share this article:
Tweet
View Full Article
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To