#include <iostream>
#include <iomanip>
using namespace std;
class Random64
{
typedef unsigned long long uint64;
public:
typedef uint64 RandomValue;
Random64& operator = (uint64 seed) { X = seed; return *this; }
Random64(uint64 seed = 0):X(seed){};
uint64 operator()(uint64 seed = uint64(-1))
{
const uint64 a = 3202034522624059733ULL;
const uint64 c = 1ULL;
if (seed != uint64(-1)) X = seed;
uint64 Y = a * X + c;
X = a * Y + c;
Y = (Y&0xFFFFFFFF00000000ULL) | (X >> 32);
return Y;
}
// Не включая max
uint64 operator()(uint64 min, uint64 max)
{
return (*this)()%(max-min) + min;
}
private:
uint64 X;
};
int main(int argc, const char * argv[])
{
Random64 r(time(0));
for(int i = 0; i < 100; ++i)
cout << hex << setfill('0') << setw(16) << r() << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBSYW5kb202NAp7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnQ2NDsKcHVibGljOgogICAgdHlwZWRlZiB1aW50NjQgUmFuZG9tVmFsdWU7CiAgICBSYW5kb202NCYgb3BlcmF0b3IgPSAodWludDY0IHNlZWQpIHsgWCA9IHNlZWQ7IHJldHVybiAqdGhpczsgfQogICAgUmFuZG9tNjQodWludDY0IHNlZWQgPSAwKTpYKHNlZWQpe307CiAgICB1aW50NjQgb3BlcmF0b3IoKSh1aW50NjQgc2VlZCA9IHVpbnQ2NCgtMSkpCiAgICB7CiAgICAgICAgY29uc3QgdWludDY0IGEgPSAzMjAyMDM0NTIyNjI0MDU5NzMzVUxMOwogICAgICAgIGNvbnN0IHVpbnQ2NCBjID0gICAgICAgICAgICAgICAgICAgMVVMTDsKCiAgICAgICAgaWYgKHNlZWQgIT0gdWludDY0KC0xKSkgWCA9IHNlZWQ7CiAgICAgICAgdWludDY0IFkgPSBhICogWCArIGM7CiAgICAgICAgWCA9IGEgKiBZICsgYzsKICAgICAgICBZID0gKFkmMHhGRkZGRkZGRjAwMDAwMDAwVUxMKSB8IChYID4+IDMyKTsKICAgICAgICByZXR1cm4gWTsKICAgIH0KICAgIC8vINCd0LUg0LLQutC70Y7Rh9Cw0Y8gbWF4CiAgICB1aW50NjQgb3BlcmF0b3IoKSh1aW50NjQgbWluLCB1aW50NjQgbWF4KQogICAgewogICAgICAgIHJldHVybiAoKnRoaXMpKCklKG1heC1taW4pICsgbWluOwogICAgfQpwcml2YXRlOgogICAgdWludDY0IFg7Cn07CgppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKewogICAgUmFuZG9tNjQgcih0aW1lKDApKTsKCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgMTAwOyArK2kpCiAgICAgICAgY291dCA8PCBoZXggPDwgc2V0ZmlsbCgnMCcpIDw8IHNldHcoMTYpIDw8IHIoKSA8PCBlbmRsOwp9Cg==