Advertisement
kosievdmerwe

Untitled

Nov 22nd, 2021
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.55 KB | None | 0 0
  1. def iter_primes(n: int) -> Iterator[int]:
  2.     assert n >= 1
  3.     if n % 2 == 0:
  4.         yield 2
  5.         while n % 2 == 0:
  6.             n //= 2
  7.            
  8.     for factor in range(3, n + 1, 2):
  9.         if factor > n or n == 1:
  10.             break
  11.        
  12.         if n % factor != 0:
  13.             continue
  14.        
  15.         yield factor
  16.         while n % factor == 0:
  17.             n //= factor
  18.            
  19.            
  20. class UnionFind:
  21.     def __init__(self):
  22.         self.parent = self
  23.         self.size = 1
  24.    
  25.     def get_root(self) -> "UnionFind":
  26.         if self.parent is self:
  27.             return self
  28.        
  29.         self.parent = self.parent.get_root()
  30.         return self.parent
  31.    
  32.     def union(self, other: "UnionFind") -> None:
  33.         root_large = self.get_root()
  34.         root_small = other.get_root()
  35.         if root_large is root_small:
  36.             return
  37.        
  38.         if root_small.size > root_large.size:
  39.             root_large, root_small = root_small, root_large
  40.        
  41.         root_small.parent = root_large
  42.         root_large.size += root_small.size
  43.        
  44.        
  45. class Solution:
  46.     def largestComponentSize(self, nums: List[int]) -> int:
  47.         prime_factors = {}
  48.         for n in nums:
  49.             uf = UnionFind()
  50.             for p in iter_primes(n):
  51.                 if p not in prime_factors:
  52.                     prime_factors[p] = uf
  53.                 else:
  54.                     prime_factors[p].union(uf)
  55.         return max(
  56.             uf.get_root().size for uf in prime_factors.values()
  57.         )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement