#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";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8cmFuZG9tPgojaW5jbHVkZSA8Y2hyb25vPgoKaW50IHJhbmRvbVJhbmdlKGludCBhLCBpbnQgYikKewogICAgcmV0dXJuIHJhbmQoKSUoYi1hKSArIGE7Cn0KCmludCByYW5kb21SYW5nZTExKGludCBhLCBpbnQgYiwgc3RkOjptdDE5OTM3JiBnZW4pCnsKICAgIHN0ZDo6dW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPD4gZGlzKGEsIGIpOwogICAgcmV0dXJuIGRpcyhnZW4pOwp9CgppbnQgbWFpbigpCnsKICAgIHNyYW5kKHRpbWUoMCkpOwogICAgCiAgICBpbnQgYSA9IDA7CiAgICBpbnQgYiA9IDEwMDAwMDAwMDA7CiAgICBpbnQgYyA9IDEwMDAwMDAwMDsKICAgIGludCBuID0gMTAwMDA7CiAgICAKICAgIHN0ZDo6Y291dCA8PCAiQyByYW5kKCkgd2l0aCBtb2R1bG8sIFJBTkRfTUFYID0gIiA8PCBSQU5EX01BWCA8PCAiXG4iOwogICAgaW50IGZyZXFbMTBdID0gezB9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCiAgICAgICAgZnJlcVtyYW5kb21SYW5nZShhLGIpL2NdKys7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kpCiAgICAgICAgc3RkOjpjb3V0IDw8IGkgPDwgImU4LSIgPDwgKGkrMSkgPDwgImU4OiAiIDw8IGZyZXFbaV0gPDwgIlxuIjsKICAgIAogICAgICAgIAogICAgICAgIAogICAgc3RkOjpjb3V0IDw8ICJcbkMrKzExIHVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvblxuIjsKICAgIHN0ZDo6bXQxOTkzNyBybmd7c3RkOjpjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCl9OwogICAgaW50IGZyZXExMVsxMF0gPSB7MH07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKICAgICAgICBmcmVxMTFbcmFuZG9tUmFuZ2UxMShhLGIscm5nKS9jXSsrOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgKytpKQogICAgICAgIHN0ZDo6Y291dCA8PCBpIDw8ICJlOC0iIDw8IChpKzEpIDw8ICJlODogIiA8PCBmcmVxMTFbaV0gPDwgIlxuIjsKfQ==