Largest Component Size by Common Factor LeetCode solution in Python
1class UnionFind:23def __init__(self, n):4self.parent = list(range(n))5self.rank = [1] * n67def find(self, p):8if p != self.parent[p]:9self.parent[p] = self.find(self.parent[p])10return self.parent[p]1112def union(self, p, q):13prt, qrt = self.find(p), self.find(q)14if prt == qrt:15return False16if self.rank[prt] > self.rank[qrt]:17prt, qrt = qrt, prt18self.parent[prt] = qrt19self.rank[qrt] += self.rank[prt]20return True212223class Solution:24def largestComponentSize(self, A: List[int]) -> int:25m = max(A)26uf = UnionFind(m + 1)27seen = set(A)2829# modified sieve of eratosthenes30sieve = [1] * (m + 1)31sieve[0] = sieve[1] = 032for k in range(m // 2 + 1):33if sieve[k]:34prev = k if k in seen else 035for x in range(2 * k, m + 1, k):36sieve[x] = 037if x in seen:38if prev:39uf.union(prev, x)40else:41prev = x42return max(uf.rank)