#include <iostream>
#include <chrono>
using namespace std;
inline unsigned GenUnsigned()
{
static constexpr unsigned im = 139968, ia = 3877, ic = 29573;
static unsigned last = 42;
return (last = (last * ia + ic) % im);
}
inline int GenSigned()
{
static constexpr int im = 139968, ia = 3877, ic = 29573;
static int last = 42;
return (last = (last * ia + ic) % im);
}
int main()
{
using timer = std::chrono::high_resolution_clock;
using to_ms = std::chrono::duration<double, std::milli>;
auto time_start = timer::now();
unsigned long long u_result = 0;
for(unsigned i = 0; i < 200000000u; ++i)
u_result += GenUnsigned();
auto time_end = timer::now();
std::cout << "uint time: " << to_ms(time_end - time_start).count() << " result:" << u_result << std::endl;
time_start = timer::now();
long long i_result = 0;
for(int i = 0; i < 200000000; ++i)
i_result += GenSigned();
time_end = timer::now();
std::cout << " int time: " << to_ms(time_end - time_start).count() << " result:" << i_result << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2hyb25vPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmlubGluZSB1bnNpZ25lZCBHZW5VbnNpZ25lZCgpCnsKICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaW0gPSAxMzk5NjgsIGlhID0gMzg3NywgaWMgPSAyOTU3MzsKICAgIHN0YXRpYyB1bnNpZ25lZCBsYXN0ID0gNDI7CiAgICByZXR1cm4gKGxhc3QgPSAobGFzdCAqIGlhICsgaWMpICUgaW0pOwp9CgppbmxpbmUgaW50IEdlblNpZ25lZCgpCnsKICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGltID0gMTM5OTY4LCBpYSA9IDM4NzcsIGljID0gMjk1NzM7CiAgICBzdGF0aWMgaW50IGxhc3QgPSA0MjsKICAgIHJldHVybiAobGFzdCA9IChsYXN0ICogaWEgKyBpYykgJSBpbSk7Cn0KCgppbnQgbWFpbigpCnsKICAgIHVzaW5nIHRpbWVyID0gc3RkOjpjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazsKICAgIHVzaW5nIHRvX21zID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZSwgc3RkOjptaWxsaT47CgogICAgYXV0byB0aW1lX3N0YXJ0ID0gdGltZXI6Om5vdygpOwogICAgdW5zaWduZWQgbG9uZyBsb25nIHVfcmVzdWx0ID0gMDsKICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IDIwMDAwMDAwMHU7ICsraSkKICAgICAgICB1X3Jlc3VsdCArPSBHZW5VbnNpZ25lZCgpOwogICAgYXV0byB0aW1lX2VuZCA9IHRpbWVyOjpub3coKTsKCiAgICBzdGQ6OmNvdXQgPDwgInVpbnQgdGltZTogIiA8PCB0b19tcyh0aW1lX2VuZCAtIHRpbWVfc3RhcnQpLmNvdW50KCkgPDwgIiByZXN1bHQ6IiA8PCB1X3Jlc3VsdCA8PCBzdGQ6OmVuZGw7CgogICAgdGltZV9zdGFydCA9IHRpbWVyOjpub3coKTsKICAgIGxvbmcgbG9uZyBpX3Jlc3VsdCA9IDA7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgMjAwMDAwMDAwOyArK2kpCiAgICAgICAgaV9yZXN1bHQgKz0gR2VuU2lnbmVkKCk7CiAgICB0aW1lX2VuZCA9IHRpbWVyOjpub3coKTsKCiAgICBzdGQ6OmNvdXQgPDwgIiBpbnQgdGltZTogIiA8PCB0b19tcyh0aW1lX2VuZCAtIHRpbWVfc3RhcnQpLmNvdW50KCkgPDwgIiByZXN1bHQ6IiA8PCBpX3Jlc3VsdCA8PCBzdGQ6OmVuZGw7CgogICAgcmV0dXJuIDA7Cn0K