1
var gcdSort = function (nums) {2
// group numbers by their prime factors5
(unionFind[x] = unionFind[x] === x ? x : find(unionFind[x]));6
const union = (x, y) => (unionFind[find(y)] = unionFind[find(x)]);7
for (const num of nums) {11
const primeFactors = getPrimeFactors(num);12
for (const primeFactor of primeFactors) {13
if (!unionFind[primeFactor]) {14
unionFind[primeFactor] = primeFactor;16
union(primeFactor, num);20
// see if it's possible to swap nums to equal sorted by checking the groups21
const sortedNums = [...nums].sort((a, b) => a - b);22
return nums.every((num, i) => find(num) === find(sortedNums[i]));25
function getPrimeFactors(n) {26
const primeFactors = new Set();32
for (let i = 3; i * i <= n; i += 2) {