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;
}