#include <iostream>
#include <cstdlib>
#include <ctime>
#include <random>
#include <chrono>

int randomRange(int a, int b)
{
    return rand()%(b-a) + a;
}

int randomRange11(int a, int b, std::mt19937& gen)
{
    std::uniform_int_distribution<> dis(a, b);
    return dis(gen);
}

int main()
{
    srand(time(0));
    
    int a = 0;
    int b = 1000000000;
    int c = 100000000;
    int n = 10000;
    
    std::cout << "C rand() with modulo, RAND_MAX = " << RAND_MAX << "\n";
    int freq[10] = {0};
    for (int i = 0; i < n; ++i)
        freq[randomRange(a,b)/c]++;
    for (int i = 0; i < 10; ++i)
        std::cout << i << "e8-" << (i+1) << "e8: " << freq[i] << "\n";
    
        
        
    std::cout << "\nC++11 uniform_int_distribution\n";
    std::mt19937 rng{std::chrono::high_resolution_clock::now().time_since_epoch().count()};
    int freq11[10] = {0};
    for (int i = 0; i < n; ++i)
        freq11[randomRange11(a,b,rng)/c]++;
    for (int i = 0; i < 10; ++i)
        std::cout << i << "e8-" << (i+1) << "e8: " << freq11[i] << "\n";
}