func_code_string: #include <bits/stdc++.h>   using namespace std;   int cnt[5005], bad[5005];   int pref[5005];   int go[5005];   long long inf = 1e18;   int good[5005][5005];   vector<int> lst[5005];   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     int n, x;     long long ans = 0;     cin >> n;     for (int i = 1; i <= n; ++i) {       cin >> x;       x = max(x, 1);       cnt[x]++;     }     vector<int> primes;     for (int i = 2; i <= 5000; ++i) {       int j = 2, x = i;       while (j * j <= x) {         if (x % j == 0)           pref[i]++, x /= j, good[i][j]++;         else           ++j;       }       if (x == i) primes.push_back(i);       if (x != 1) pref[i]++, good[i][x]++;       pref[i] += pref[i - 1];       for (int j = 1; j <= 5000; ++j) good[i][j] += good[i - 1][j];       for (int j = 1; j <= 5000; ++j)         if (good[i][j] > 0) lst[i].push_back(j);     }     for (int i = 1; i <= 5000; ++i) ans += (long long)cnt[i] * (long long)pref[i];     int imin = 5005;     int sum_bad = 0;     set<int> Q;     for (int i = 1; i <= 5000; ++i) {       if (cnt[i] != 0) Q.insert(i);     }     while (1) {       long long MX = inf;       int to = -1;       for (auto key : primes) {         if (key <= imin) {           long long was = ans + (long long)sum_bad;           for (auto i : Q) {             int checks = 0;             if ((int)lst[i].size() != 0 && lst[i].back() > key) checks = 1;             if (checks || good[i][key] == 0)               was += (long long)cnt[i];             else               was -= (long long)cnt[i];           }           if (was < MX) MX = was, to = key;         } else           break;       }       if (MX >= ans) {         cout << ans <<   n ;         return 0;       }       ans = MX;       go[to]++, imin = to;       vector<int> dels;       for (auto i : Q) {         int checks = 0;         if ((int)lst[i].size() != 0 && lst[i].back() > to) checks = 1;         if (!(checks || good[i][to] == 0)) {           good[i][to]--;           if (good[i][to] == 0) lst[i].pop_back();         } else {           sum_bad += cnt[i];           dels.push_back(i);         }       }       for (auto key : dels) Q.erase(key);     }     return 0;   }   