def factorization(n): arr = defaultdict(int) temp = n for i in range(2, int(-(-n**0.5//1))+1): if temp%i==0: cnt=0 while temp%i==0: cnt+=1 temp //= i arr[i] = cnt if temp!=1: arr[temp] = 1 if arr==[]: arr[n] = 1 return arr def dfs(v, p): ans[v] = factorization(A[v]) for nv in G[v]: if nv==p: continue dfs(nv, v) for key in ans[nv]: if ans[v][key]