#include <stdio.h>
void test_lcg(const char * const source, const unsigned a, const unsigned c)
{
unsigned x = 0;
unsigned long long n = 0;
printf("%s\nx = x * %u + %u\n", source
, a
, c
); do {
x = x * a + c;
++n;
} while (x);
printf("cycle length: %llu\n\n", n
); }
int main()
{
printf("https://e...content-available-to-author-only...a.org/wiki/Linear_congruential_generator\n\n"); test_lcg("Numerical Recipes", 1664525, 1013904223);
test_lcg("Borland C/C++", 22695477, 1);
test_lcg("Borland Delphi", 134775813, 1);
test_lcg("Turbo Pascal", 33797, 1);
test_lcg("Microsoft Visual C/C++", 214013, 2531011);
test_lcg("old glibc", 69069, 1);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIHRlc3RfbGNnKGNvbnN0IGNoYXIgKiBjb25zdCBzb3VyY2UsIGNvbnN0IHVuc2lnbmVkIGEsIGNvbnN0IHVuc2lnbmVkIGMpCnsKICAgIHVuc2lnbmVkIHggPSAwOwogICAgdW5zaWduZWQgbG9uZyBsb25nIG4gPSAwOwogICAgcHJpbnRmKCIlc1xueCA9IHggKiAldSArICV1XG4iLCBzb3VyY2UsIGEsIGMpOwogICAgZG8gewogICAgICAgIHggPSB4ICogYSArIGM7CiAgICAgICAgKytuOwogICAgfSB3aGlsZSAoeCk7CiAgICBwcmludGYoImN5Y2xlIGxlbmd0aDogJWxsdVxuXG4iLCBuKTsKfQoKaW50IG1haW4oKQp7CiAgICBwcmludGYoImh0dHBzOi8vZS4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uYS5vcmcvd2lraS9MaW5lYXJfY29uZ3J1ZW50aWFsX2dlbmVyYXRvclxuXG4iKTsKICAgIHRlc3RfbGNnKCJOdW1lcmljYWwgUmVjaXBlcyIsIDE2NjQ1MjUsIDEwMTM5MDQyMjMpOwogICAgdGVzdF9sY2coIkJvcmxhbmQgQy9DKysiLCAyMjY5NTQ3NywgMSk7CiAgICB0ZXN0X2xjZygiQm9ybGFuZCBEZWxwaGkiLCAxMzQ3NzU4MTMsIDEpOwogICAgdGVzdF9sY2coIlR1cmJvIFBhc2NhbCIsIDMzNzk3LCAxKTsKICAgIHRlc3RfbGNnKCJNaWNyb3NvZnQgVmlzdWFsIEMvQysrIiwgMjE0MDEzLCAyNTMxMDExKTsKICAgIHRlc3RfbGNnKCJvbGQgZ2xpYmMiLCA2OTA2OSwgMSk7CiAgICByZXR1cm4gMDsKfQ==