Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2014
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.60 KB | None | 0 0
  1. struct random
  2. {
  3.     static const LL multiplier = 25214903917LL;
  4.     static const LL addend = 11LL;
  5.     static const LL mask = 281474976710655LL;
  6.  
  7.     LL seed;
  8.  
  9.     random()
  10.     {
  11.         seed = 3905348978240129619LL;
  12.     }
  13.  
  14.     void setSeed(LL newSeed)
  15.     {
  16.         seed = newSeed;
  17.     }
  18.  
  19.     int nextBits(int bits)
  20.     {
  21.         seed = (seed * multiplier + addend) & mask;
  22.         return int(seed >> (48 - bits));
  23.     }
  24.  
  25.     int nextInt(int n)
  26.     {
  27.         if ((n & (-n)) == n)
  28.             return int((n * LL(nextBits(31))) >> 31);
  29.         int bits, val;
  30.         do
  31.         {
  32.             bits = nextBits(31);
  33.             val = bits % n;
  34.         }
  35.         while (bits - val + (n - 1) < 0);
  36.         return val;
  37.     }
  38. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement