C++ easy understanding union find solution
\tclass dsu{\n\t\tpublic:\n\t\tvector arr;\n\t\tdsu(int n):arr(n){\n\t\t\tfor(int i=0;i<n;i++){\n\t\t\t\tarr[i]=i;\n\t\t\t}\n\t\t}\n\n\n\t\tvoid merge(int a, in
\tclass dsu{\n\t\tpublic:\n\t\tvector<int> arr;\n\t\tdsu(int n):arr(n){\n\t\t\tfor(int i=0;i<n;i++){\n\t\t\t\tarr[i]=i;\n\t\t\t}\n\t\t}\n\n\n\t\tvoid merge(int a, int b){\n\t\t\tarr[find(arr[a])]=arr[find(arr[b])];\n\t\t}\n\n\n\t\tint find(int x){\n\t\t\tif(arr[x]!=x){\n\t\t\t\tarr[x]=find(arr[x]);\n\t\t\t}\n\t\t\treturn arr[x];\n\t\t}\n\n\n\t};\n\tclass Solution {\n\n\tpublic:\n\t\tint largestComponentSize(vector<int>& A) {\n\t\t\tint n=*max_element(A.begin(),A.end());\n\t\t\tdsu DSU(n+1);\n\t\t\tfor(auto x:A){\n\t\t\t\tint temp=sqrt(x);\n\t\t\t\tfor(int k=2;k<=temp;k++){\n\t\t\t\t\tif(x%k==0){\n\t\t\t\t\t\tDSU.merge(x,k);\n\t\t\t\t\t\tDSU.merge(x,x/k);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tunordered_map<int,int> m;\n\t\t\tint res=1;\n\t\t\tfor(auto v:A){\n\t\t\t\tm[DSU.find(v)]+=1;\n\t\t\t\tres=max(res,m[DSU.find(v)]);\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\t};
['Union Find', 'C', 'C++']