/* integers in poisson distribution * mean: The mean of the poisson distribution */ uint32_t random_uint_poisson(double mean) { assert(mean > 0); // get the random distribution boost::random::poisson_distribution<uint32_t, double> ranGen(mean); return ranGen(gen32); }
/* doubles in exponential distribution * lambda: reverse mean */ double random_double_exponential(double lambda) { assert(lambda > 0); // get the random distribution boost::random::exponential_distribution<double> ranGen(lambda); return ranGen(genDouble); }
void genpair(){ bool hitmax = FALSE; impossible = FALSE; ranGen(max1); if(mpz_cmp(rndm, min1) < 0) mpz_add(rndm, rndm, min1); mpz_set(num1, rndm); ranGen(max2); if(mpz_cmp(rndm, min2) < 0) mpz_add(rndm, rndm, min2); mpz_set(num2, rndm); do{ mpz_gcd(_gcd, num1, num2); if(!mpz_cmp_ui(_gcd, 1)){ rprime = TRUE; }else{ if(!mpz_cmp(num2, max2)){ if(!hitmax){ mpz_set(num2, min2); hitmax = TRUE; }else{ impossible = TRUE; } } mpz_add_ui(num2, num2, 1); } }while(!rprime && !impossible); rprime = FALSE; }