JSFiddle - React, Tailwind, and code Playground

HTML

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script src="http://peterolson.github.com/BigInteger.js/BigInteger.min.js"></script>
<body>
    <div id="main"></div>
</body>

JavaScript

var _primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37];

function log(text) {
    $('#main').append(text + "\n");
}

function big(exponents) {
    var i, e, val = bigInt.one;
    for (i = 0; i < exponents.length; i++)
        for (e = 0; e < exponents[i]; e++)
            val = val.times(_primes[i]);
    return val.toString();
}

function hamming(n, nprimes) {
    var i, iter, p, q, min, equal, x;

    var hammings = new Array(n);                            // array of hamming #s we generate
    hammings[0] = new Array(nprimes);
    for (p = 0; p < nprimes; p++) {
        hammings[0][p] = 0;
    }

    var hammlogs = new Array(n);                            // log values for above
    hammlogs[0] = 0;

    var primelogs = new Array(nprimes);                     // pre-calculated prime log values
    var listlogs  = new Array(nprimes);                     // log values of list heads
    for (p = 0; p < nprimes; p++) {
        primelogs[p] = listlogs[p] = Math.log(_primes[p]);
    }

    var indexes = new Array(nprimes);                       // intermediate hamming values as indexes into hammings
    for (p = 0; p < nprimes; p++) {
        indexes[p] = 0;
    }

    var listheads = new Array(nprimes);                     // intermediate hamming list heads
    for (p = 0; p < nprimes; p++) {
        listheads[p] = new Array(nprimes);
        for (q = 0; q < nprimes; q++) {
            listheads[p][q] = 0;
        }
        listheads[p][p] = 1;
    }

    for (iter = 1; iter < n; iter++) {
        min = 0;
        for (p = 1; p < nprimes; p++)
            if (listlogs[p] < listlogs[min])
                min = p;
        hammlogs[iter] = listlogs[min];                     // that's the next hamming number
        hammings[iter] = listheads[min].slice();
        for (p = 0; p < nprimes; p++) {                     // update each list head if it matches new value
            equal = true;                                   // test each exponent to see if number...