new file: CF1614D2.cpp
Check cpp / md pair / Check md headers (push) Successful in 4s

This commit is contained in:
hanyixuanten committed 2026-10-28 09:45:48 +00:00
1 parent 4bf4f072db
commit 68c1db108d
2 files changed
+110

No files matched your search

+45
View File
@@ -0,0 +1,45 @@
#include<bits/stdc++.h>
using namespace std;
int n;
const int maxa = 20000000;
vector<int> prime;
bool vis[20000005];
int cnt[20000005];
long long f[20000005];
int a[100005];
int main() {
for (int i = 2; i <= 20000000; ++i) {
if (!vis[i]) prime.push_back(i);
for (int p : prime) {
if (1ll * i * p > maxa) break;
vis[i * p] = true;
if (i % p == 0) break;
}
}
scanf("%d", &n);
for(int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
}
for(int i = 1; i <= n; ++i) {
for(int j = 1; j * j <= a[i]; ++j) {
if(a[i] % j == 0) {
cnt[j]++;
if(j * j != a[i]) ++cnt[a[i] / j];
}
}
}
for(int i = maxa; i >= 1; --i) {
f[i] = 1ll * i * cnt[i];
for(int j = 0; j < prime.size() && i * prime[j] <= maxa; ++j) {
f[i] = max(f[i], f[i * prime[j]] + 1ll * i * (cnt[i] - cnt[i * prime[j]]));
}
}
long long ans = 0;
for(int i = 1; i <= maxa; ++i) {
if(cnt[i] == n) {
ans = max(ans, f[i]);
}
}
printf("%lld\n", ans);
return 0;
}