JSFiddle - React, Tailwind, and code Playground

by dvjc

HTML

<div id="divResults"></div>
<hr />
<div id="divFactors"></div>
<hr />
<div id="divDensity"></div>

JavaScript

var densityDisplay = '';
var target = getfirstTriangularNumberAboveNfactors(500);

document.getElementById('divResults').innerText = target;
document.getElementById('divDensity').innerText = densityDisplay;

var density = [];
function populateDensity(){
    density[1] = 1;
    density[2] = 3;
    density[4] = 6;
    density[6] = 28;
    density[9] = 36;
    density[16] = 120;
    density[18] = 300;
    density[20] = 528;
    density[24] = 630;
    density[36] = 2016;
    density[40] = 3240;
    density[48] = 5460;
    density[90] = 25200;
    density[112] = 73920;
    density[128] = 157080;
    density[144] = 157080;
}

function getfirstTriangularNumberAboveNfactors(n){
    var min = 12375; // this is actually the value - it took hours to acquire
    var max = min + 100;
    var firstMatch = -1;
    for( var i = min; i < max; i++){
        var p = getNthTriangularNumber(i);
        var q = getFactorsFor(p);
        if( q.length > n ){
            document.getElementById('divFactors').innerText = "Factors: " + q;
            firstMatch = p;
            break;
        }
    }
    densityDisplay = "density[" + q.length + "] = " + firstMatch;
    return "First triangular number with more than " + n + " factors is: " + firstMatch + " (  triangular #" + i + " )";
}

// brute force factorization of n
function getFactorsFor(n){
    var factors = [];
    for( var i = 1; i <= n; i++ ){
        if( i * Math.floor(n/i) == n){
            factors.push(i);
        }
    }
    return factors;
}

//returns the nth triangular number
// n=1 => 1; n=2 => 1 + 2; n=3 => 1 + 2 + 3
function getNthTriangularNumber(n){
    return n * (n+1) / 2;
}