#include <stdio.h>
static unsigned int x = 123456789;
static unsigned int y = 362436069;
static unsigned int z = 521288629;
static unsigned int w = 88675123;
unsigned int randint(void) {
unsigned int t;
t = (x ^ (x << 11));
x = y; y = z; z = w;
w = (w ^ (w >> 19)) ^ (t ^ (t >> 8));
return w;
}
int main(void) {
unsigned int max = 0x56000000u;
unsigned int blocksize = max / 16;
int count[16] = {0};
int i;
for (i = 0; i < 160000; i++) {
#if 0
unsigned int value = randint() % max;
#else
unsigned int value;
int ok = 0;
unsigned int r = (0xffffffffu % max + 1) % max;
do {
unsigned int x = randint();
if (r == 0 || x < 0xffffffff - (r - 1)) { ok = 1; value = x % max; }
} while (!ok);
#endif
count[value / blocksize]++;
}
for (i = 0; i < 16; i++) {
printf("%2d %8d\n", i
, count
[i
]); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgpzdGF0aWMgdW5zaWduZWQgaW50IHggPSAxMjM0NTY3ODk7CnN0YXRpYyB1bnNpZ25lZCBpbnQgeSA9IDM2MjQzNjA2OTsKc3RhdGljIHVuc2lnbmVkIGludCB6ID0gNTIxMjg4NjI5OwpzdGF0aWMgdW5zaWduZWQgaW50IHcgPSA4ODY3NTEyMzsKCnVuc2lnbmVkIGludCByYW5kaW50KHZvaWQpIHsKCXVuc2lnbmVkIGludCB0OwoJdCA9ICh4IF4gKHggPDwgMTEpKTsKCXggPSB5OyB5ID0gejsgeiA9IHc7Cgl3ID0gKHcgXiAodyA+PiAxOSkpIF4gKHQgXiAodCA+PiA4KSk7CglyZXR1cm4gdzsKfQoKaW50IG1haW4odm9pZCkgewoJdW5zaWduZWQgaW50IG1heCA9IDB4NTYwMDAwMDB1OwoJdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IG1heCAvIDE2OwoJaW50IGNvdW50WzE2XSA9IHswfTsKCWludCBpOwoJZm9yIChpID0gMDsgaSA8IDE2MDAwMDsgaSsrKSB7CiNpZiAwCgkJdW5zaWduZWQgaW50IHZhbHVlID0gcmFuZGludCgpICUgbWF4OwojZWxzZQoJCXVuc2lnbmVkIGludCB2YWx1ZTsKCQlpbnQgb2sgPSAwOwoJCXVuc2lnbmVkIGludCByID0gKDB4ZmZmZmZmZmZ1ICUgbWF4ICsgMSkgJSBtYXg7CgkJZG8gewoJCQl1bnNpZ25lZCBpbnQgeCA9IHJhbmRpbnQoKTsKCQkJaWYgKHIgPT0gMCB8fCB4IDwgMHhmZmZmZmZmZiAtIChyIC0gMSkpIHsgb2sgPSAxOyB2YWx1ZSA9IHggJSBtYXg7IH0KCQl9IHdoaWxlICghb2spOwojZW5kaWYKCQljb3VudFt2YWx1ZSAvIGJsb2Nrc2l6ZV0rKzsKCX0KCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CgkJcHJpbnRmKCIlMmQgJThkXG4iLCBpLCBjb3VudFtpXSk7Cgl9CglyZXR1cm4gMDsKfQo=