1
var largestComponentSize = function (nums) {2
const rootByFactor = new Map();3
const parents = new Array(nums.length);5
function addFactor(i, factor) {6
if (rootByFactor.has(factor)) {7
let r = rootByFactor.get(factor);8
while (parents[i] != i) i = parents[i];9
while (parents[r] != r) r = parents[r];12
rootByFactor.set(factor, parents[i]);15
for (const [i, num] of nums.entries()) {18
for (let factor = 2; factor * factor <= num; ++factor) {19
if (num % factor == 0) {21
addFactor(i, num / factor);27
const sums = new Array(nums.length).fill(0);28
for (let r of parents) {29
while (parents[r] != r) r = parents[r];30
largest = Math.max(largest, ++sums[r]);