fork download
  1. import java.util.Random;
  2.  
  3. public class Main {
  4.  
  5. public static long seed;
  6. public static void main(String[] args)
  7. {
  8. Random r = new Random(123456789);
  9. long l = r.nextLong(); // первое случаное число
  10.  
  11. long oldSeedPart = (l >>> 32) << 16;
  12. long lastPart = l & 0xffffffffL;
  13. if ((int) lastPart < 0)
  14. oldSeedPart += (1L << 16);
  15. long i;
  16. for (i = 0; i < (1 << 16); ++i)
  17. {
  18. long oldSeed = oldSeedPart + i;
  19. long newSeed = (oldSeed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
  20. int rnd = (int)(newSeed >>> 16);
  21. if (rnd == (int) lastPart)
  22. break;
  23. }
  24. long oldSeed = oldSeedPart + i;
  25. oldSeed = (oldSeed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
  26. seed = oldSeed; // нашли текущий seed
  27.  
  28. System.out.println(Long.toHexString(nextLong())); // второе предсказанное случаное число
  29. System.out.println(Long.toHexString(r.nextLong())); // второе случаное число
  30. }
  31.  
  32. public static long nextLong() {
  33. return ((long)next(32) << 32) + next(32);
  34. }
  35.  
  36. public static int next(int bits) {
  37. seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
  38. int result = (int)(seed >>> (48 - bits));
  39. return result;
  40. }
  41. }
  42.  
Success #stdin #stdout 0.07s 380224KB
stdin
Standard input is empty
stdout
74facac7413f22b0
74facac7413f22b0