JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://unpkg.com/[email protected]/bignumber.js"></script>
<button>Сгенерировать следующее число</button>
<div id="list"></div>

CSS

button {
  --theme: #f06;
  background-color: white;
  color: var(--theme);
  border: 2px solid var(--theme);
  padding: 1em;
  border-radius: 0.25em;
  font: bold 1.25em Helvetica, sans-serif;
  transition: 400ms;
}
button:hover {
  box-shadow: inset 0 0 0 3em var(--theme);
  color: white;
}
#list {
  display: flex;
  font: 1em Helvetica, sans-serif;
  flex-direction: column-reverse;
  counter-reset: generated-number 0;
}
#list span {
  display: flex;
  counter-increment: generated-number 1;
  padding: 1em;
  border: 1px solid #eee;
  border-radius: 5px;
  margin: 0.5em 0;
  word-break: break-all;
}
span::before {
  content: counter(generated-number) ". ";
  padding: 0 1em;
  word-break: normal;
}

JavaScript

BigNumber.config({ EXPONENTIAL_AT: [0, 1300] });

function getNonRepeatingNumberIterator() {
  // const INITIAL_NUMBER = 1 + 1023 * Math.random() | 0;
  // const INITIAL_NUMBER = 1 + 2047 * Math.random() | 0;
  // const INITIAL_NUMBER = 1;
  const INITIAL_NUMBER = new Uint8Array(4096);
  INITIAL_NUMBER.forEach((v, i, a) => a[i] = 2 * Math.random());

  console.log(INITIAL_NUMBER);

  let s = getNextNumber(INITIAL_NUMBER);


  function getNextNumber(s) {var base = 2;
    // x^4096 + x^4095 + x^4081 + x^4069 + 1
    let feedback = s[4096] ^ s[4095] ^ s[4081] ^ s[4069];

    s.copyWithin(1, 0);
    s[0] = feedback;

    return s;
  }

  return {
    next: function() {
      // Даже если генерировать со скоростью 10^6 в секунду,
      // потребуется около 3.30953661...*10^1219 лет
      // т. е. во много раз больше многих миллионов и
      // миллиардов лет, прежде чем тут снова появится
      // число INITIAL_NUMBER, так что можно и не проверять.
      // Хотя это пвевдо-случайная последовательность чисел,
      // Math.random() каждое своё ~10^17 значение за тоже самое время
      // успеет выдать ~10^1216 раз, так что эта
      // последовательность является более «случайной»
      // if(s.toString() === INITIAL_NUMBER.toString()) return {
      // 	value: null,
      // 	done: true
      // };

      s = getNextNumber(s);

      return {
        value: s,
        done: false
      };
    }
  };
}

// использование
let iterator = getNonRepeatingNumberIterator();
let iteratorStep;
let list = document.getElementById("list");

document.querySelector("button").addEventListener("click", event => {
  iteratorStep = iterator.next();
  if(iteratorStep.done) return;

  let span = document.createElement("span");
  span.textContent = new BigNumber(iteratorStep.value.join(""), 2).toString();
  list.appendChild(span);
});