paranid5

Random

Jun 3rd, 2021 (edited)
772
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.79 KB | None | 0 0
  1. import java.io.*;
  2. import java.time.LocalTime;
  3. import java.util.Arrays;
  4. import java.util.concurrent.atomic.AtomicInteger;
  5.  
  6. final class Main {
  7.     private static final class BadRandom {
  8.         private static final class ParamGenerator {
  9.             private static final int rand() {
  10.                 return (LocalTime.now().getNano()
  11.                         * LocalTime.now().getHour()
  12.                         + LocalTime.now().getSecond())
  13.                         % LocalTime.now().getNano();
  14.             }
  15.         }
  16.  
  17.         private static AtomicInteger cnt = new AtomicInteger(0);
  18.         private static AtomicInteger a = new AtomicInteger(ParamGenerator.rand());
  19.         private static AtomicInteger c = new AtomicInteger(ParamGenerator.rand());
  20.         private static AtomicInteger m = new AtomicInteger(ParamGenerator.rand());
  21.         private static int last = ParamGenerator.rand();
  22.  
  23.         public static final void update() {
  24.             cnt.updateAndGet(x -> {
  25.                 final var res = (x + 1) % 100;
  26.                
  27.                 if (res == 0) {
  28.                     c.set(ParamGenerator.rand());
  29.                     m.set(ParamGenerator.rand());
  30.                 }
  31.  
  32.                 return res;
  33.             });
  34.         }
  35.  
  36.         private static final int rand() {
  37.             last = (a.get() * last + c.get()) % m.get();
  38.             update();
  39.             return last;
  40.         }
  41.     }
  42.  
  43.     public static final void main(final String[] args) throws IOException {
  44.         try (final var reader = new BufferedReader(new InputStreamReader(System.in))) {
  45.             final var writer = System.out;
  46.  
  47.             writer.print("n: ");
  48.             final var n = Integer.parseInt(reader.readLine());
  49.  
  50.             writer.print("m: ");
  51.             final var m = Integer.parseInt(reader.readLine());
  52.  
  53.             final var arr = new int[n];
  54.  
  55.             final var numsInThreads = new int[m];
  56.             final var ost = n % m;
  57.             Arrays.fill(numsInThreads, n / m);
  58.             for (int i = 0; i < ost; i++) numsInThreads[i]++;
  59.  
  60.             int cur = 0;
  61.  
  62.             final var threads = new Thread[m];
  63.  
  64.             for (int p = 0; p < m; p++) {
  65.                 final var _cur = cur;
  66.                 final var finalP = p;
  67.  
  68.                 threads[p] = new Thread(() -> {
  69.                     final var f = _cur + numsInThreads[finalP];
  70.                     for (int i = _cur; i < f; i++) arr[i] = BadRandom.rand();
  71.                 });
  72.  
  73.                 threads[p].start();
  74.                 cur += numsInThreads[p];
  75.             }
  76.  
  77.             Arrays.stream(threads).forEach(thread -> {
  78.                 try { thread.join(); } catch (final Exception e) { e.printStackTrace(); }
  79.             });
  80.  
  81.             Arrays.stream(arr).forEach(writer::println);
  82.         }
  83.     }
  84. }
Add Comment
Please, Sign In to add comment