#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<ll, ll>
#define fi first
#define sec second
const ll N = 1e7;
const ll INF = 4e18;
const ll MOD = 1e9 + 7;
struct DSU{
ll n;
vector<ll> par, sz;
DSU(ll _n){
n = _n;
par.resize(n + 5), sz.resize(n + 5);
for(int i = 1; i <= n; i++){
par[i] = i, sz[i] = 1;
}
}
ll find(ll idx){
if(par[idx] == idx) return idx;
return par[idx] = find(par[idx]);
}
bool join(ll a, ll b){
a = find(a), b = find(b);
if(a == b) return false;
if(sz[a] < sz[b]) swap(a, b);
par[b] = a;
sz[a] += sz[b];
sz[b] = 0;
return true;
}
};
vector<pii> edges[N + 5];
vector<ll> isi;
ll nxt[N + 5], ada[N + 5];
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int tc = 1;
// cin >> tc;
for(;tc--;){
ll n; cin >> n;
vector<ll> a(n + 5);
for(int i = 1; i <= n; i++){
cin >> a[i];
isi.push_back(a[i]);
ada[a[i]] = 1;
}
sort(isi.begin(), isi.end());
isi.erase(unique(isi.begin(), isi.end()), isi.end());
ll cur = 0;
for(int i = 1; i <= N; i++){
while(cur < isi.size() && isi[cur] <= i) cur++;
if(cur < isi.size()) nxt[i] = isi[cur];
}
DSU dsu(N);
for(ll i = 0; i < isi.size(); i++){
for(ll j = isi[i]; j <= N; j += isi[i]){
if(ada[j]){
dsu.join(isi[i], j);
}
if(nxt[j]){
edges[nxt[j] % isi[i]].push_back({nxt[j], isi[i]});
}
}
}
ll ans = 0;
for(ll i = 1; i <= N; i++){
for(auto [x, y] : edges[i]){
ans += dsu.join(x, y) * i;
}
}
cout << ans << "\n";
}
}
/*
*/
# | 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... |