#include <bits/stdc++.h>
#define int long long
using namespace std;
int exist[10000005], par[100005], sz[100005];
vector<int> adj[100005], vec;
int findPar(int u)
{
return par[u]==u?u:(par[u]=findPar(par[u]));
}
int addEdge(int u, int v)
{
if (findPar(u)==findPar(v))
return 0;
if (sz[par[u]]>sz[par[v]])
swap(u, v);
sz[par[v]]+=sz[par[u]];
par[par[u]]=par[v];
return 1;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, ans=0;
cin >> n;
for (int i=0; i<n; i++)
{
int x;
cin >> x;
vec.push_back(x);
}
sort(vec.begin(), vec.end());
vec.resize(unique(vec.begin(), vec.end())-vec.begin());
for (int i=0; i<vec.size(); i++)
{
exist[vec[i]]=i+1;
par[i]=i;
sz[i]=1;
}
for (int i=0;; i++)
{
for (int j=i+1; j<=10000000; j++)
{
if (!exist[j])
continue;
if (j<=100)
{
for (int k=0; k<vec.size(); k++)
if (vec[k]%j==i && addEdge(exist[j]-1, k))
ans+=i;
}
else
{
for (int k=j+i; k<=10000000; k+=j)
if (exist[k] && addEdge(exist[j]-1, exist[k]-1))
ans+=i;
}
}
if (sz[findPar(0)]==vec.size())
{
cout << ans;
return 0;
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |