import java.util.Random;
public class Main {
public static long seed;
public static void main
(String[] args
) {
long l = r.nextLong(); // первое случаное число
long oldSeedPart = (l >>> 32) << 16;
long lastPart = l & 0xffffffffL;
if ((int) lastPart < 0)
oldSeedPart += (1L << 16);
long i;
for (i = 0; i < (1 << 16); ++i)
{
long oldSeed = oldSeedPart + i;
long newSeed = (oldSeed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
int rnd = (int)(newSeed >>> 16);
if (rnd == (int) lastPart)
break;
}
long oldSeed = oldSeedPart + i;
oldSeed = (oldSeed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
seed = oldSeed; // нашли текущий seed
System.
out.
println(Long.
toHexString(nextLong
())); // второе предсказанное случаное число System.
out.
println(Long.
toHexString(r.
nextLong())); // второе случаное число }
public static long nextLong() {
return ((long)next(32) << 32) + next(32);
}
public static int next(int bits) {
seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
int result = (int)(seed >>> (48 - bits));
return result;
}
}
aW1wb3J0IGphdmEudXRpbC5SYW5kb207CgpwdWJsaWMgY2xhc3MgTWFpbiB7CgoJcHVibGljIHN0YXRpYyBsb25nIHNlZWQ7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQoJewoJCVJhbmRvbSByID0gbmV3IFJhbmRvbSgxMjM0NTY3ODkpOwoJCWxvbmcgbCA9IHIubmV4dExvbmcoKTsgLy8g0L/QtdGA0LLQvtC1INGB0LvRg9GH0LDQvdC+0LUg0YfQuNGB0LvQvgoJCQoJCWxvbmcgb2xkU2VlZFBhcnQgPSAobCA+Pj4gMzIpIDw8IDE2OwoJCWxvbmcgbGFzdFBhcnQgPSBsICYgMHhmZmZmZmZmZkw7CgkJaWYgKChpbnQpIGxhc3RQYXJ0IDwgMCkKCQkJb2xkU2VlZFBhcnQgKz0gKDFMIDw8IDE2KTsKCQlsb25nIGk7CgkJZm9yIChpID0gMDsgaSA8ICgxIDw8IDE2KTsgKytpKQoJCXsKCQkJbG9uZyBvbGRTZWVkID0gb2xkU2VlZFBhcnQgKyBpOwoJCQlsb25nIG5ld1NlZWQgPSAob2xkU2VlZCAqIDB4NURFRUNFNjZETCArIDB4QkwpICYgKCgxTCA8PCA0OCkgLSAxKTsKCQkJaW50IHJuZCA9IChpbnQpKG5ld1NlZWQgPj4+IDE2KTsKCQkJaWYgKHJuZCA9PSAoaW50KSBsYXN0UGFydCkKCQkJCWJyZWFrOwoJCX0KCQlsb25nIG9sZFNlZWQgPSBvbGRTZWVkUGFydCArIGk7CgkJb2xkU2VlZCA9IChvbGRTZWVkICogMHg1REVFQ0U2NkRMICsgMHhCTCkgJiAoKDFMIDw8IDQ4KSAtIDEpOwoJCXNlZWQgPSBvbGRTZWVkOyAvLyDQvdCw0YjQu9C4INGC0LXQutGD0YnQuNC5IHNlZWQKCQkKCQlTeXN0ZW0ub3V0LnByaW50bG4oTG9uZy50b0hleFN0cmluZyhuZXh0TG9uZygpKSk7IC8vINCy0YLQvtGA0L7QtSDQv9GA0LXQtNGB0LrQsNC30LDQvdC90L7QtSDRgdC70YPRh9Cw0L3QvtC1INGH0LjRgdC70L4KCQlTeXN0ZW0ub3V0LnByaW50bG4oTG9uZy50b0hleFN0cmluZyhyLm5leHRMb25nKCkpKTsgLy8g0LLRgtC+0YDQvtC1INGB0LvRg9GH0LDQvdC+0LUg0YfQuNGB0LvQvgoJfQoJCglwdWJsaWMgc3RhdGljIGxvbmcgbmV4dExvbmcoKSB7CgkJcmV0dXJuICgobG9uZyluZXh0KDMyKSA8PCAzMikgKyBuZXh0KDMyKTsKCX0KCQoJcHVibGljIHN0YXRpYyBpbnQgbmV4dChpbnQgYml0cykgewoJCXNlZWQgPSAoc2VlZCAqIDB4NURFRUNFNjZETCArIDB4QkwpICYgKCgxTCA8PCA0OCkgLSAxKTsKCQlpbnQgcmVzdWx0ID0gKGludCkoc2VlZCA+Pj4gKDQ4IC0gYml0cykpOwoJCXJldHVybiByZXN1bHQ7Cgl9Cn0K