func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long inf = 1e15;   const int maxn = 5000 + 5;   long long cnt[maxn + 10];   long long p[maxn + 10][maxn + 10];   long long pd[maxn + 10];   int main() {     memset(cnt, 0, sizeof(cnt));     int n;     scanf( %d , &n);     for (int i = (1); i <= (n); i++) {       int u;       scanf( %d , &u);       cnt[u]++;     }     for (int i = (2); i <= (maxn); i++) {       for (int j = (1); j <= (i); j++) p[i][j] += p[i - 1][j];       int mm = sqrt(i), tem = i;       for (int j = (2); j <= (mm); j++) {         while (tem % j == 0) {           p[i][j]++;           tem /= j;         }       }       if (tem > 1) p[i][tem]++;     }     long long ans = 0, cur = 0;     for (int i = (1); i <= (maxn); i++) {       if (!cnt[i]) {         pd[i] = 1;         continue;       }       for (int j = (1); j <= (i); j++) {         ans += p[i][j] * cnt[i];         cur += p[i][j] * cnt[i];         if (p[i][j]) pd[i] = j;       }     }     while (*max_element(pd, pd + maxn + 10) > 1) {       long long f[maxn + 10];       memset(f, 0, sizeof(f));       for (int i = (1); i <= (maxn); i++) f[pd[i]] += cnt[i];       long long besp = max_element(f, f + maxn + 10) - f;       long long besg = f[besp];       if (besg * 2 <= n || besp == 1) break;       cur += n - 2 * besg;       ans = min(ans, cur);       for (int i = (1); i <= (maxn); i++) {         if (pd[i] != besp) pd[i] = 1;         if (pd[i] == 1) continue;         p[i][besp] -= 1;         while (pd[i] > 1 && p[i][pd[i]] == 0) pd[i]--;       }     }     printf( %I64d n , ans);     return 0;   }   