1
var getCoprimes = function (nums, edges) {
2
const node = {};
3
const ans = Array(nums.length).fill(null);
4

5
function addNode(f, t) {
6
if (!node[f]) {
7
node[f] = [];
8
}
9
node[f].push(t);
10
}
11

12
edges.forEach(([f, t]) => {
13
addNode(f, t);
14
addNode(t, f);
15
});
16

17
function gcd(a, b) {
18
while (b) [a, b] = [b, a % b];
19
return a;
20
}
21

22
const map = [];
23
for (let i = 0; i < 51; i++) {
24
map[i] = [];
25
for (let j = 0; j < 51; j++) {
26
map[i][j] = gcd(i, j);
27
}
28
}
29

30
let pi = -1;
31
let path = Array(nums.length);
32
function check(v) {
33
if (ans[v] !== null) return;
34
ans[v] = -1;
35
let a = nums[v];
36
for (let k = pi; k >= 0; k--) {
37
let b = nums[path[k]];
38
if (map[a][b] === 1) {
39
ans[v] = path[k];
40
break;
41
}
42
}
43
if (node[v]) {
44
path[++pi] = v;
45
node[v].forEach((child) => check(child));
46
pi--;
47
}
48
}
49

50
for (let i = 0; i < nums.length; i++) {
51
check(i);
52
}
53

54
return ans;
55
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0