Cod sursa(job #2736033)

Utilizator vansJos da pa perete vans Data 3 aprilie 2021 09:23:24
Problema Economie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 1000, NRMAX = 5e4;

int n, x, fr[NRMAX + 1];
bool isPr[NRMAX + 1];
set<int> st;

int main()
{
    freopen("economie.in", "r", stdin);
    freopen("economie.out", "w", stdout);
    scanf("%d", &n);
    for(int i = 1; i <= n; ++i) {
        scanf("%d", &x), ++fr[x];
        if(x == 1) {
            printf("1\n1");
            return 0;
        }
    }
    int cnt = 0;
    for(int i = 2; i <= NRMAX && cnt < n; ++i)
        if(!isPr[i]) {
            for(int j = 2 * i; j <= NRMAX; j += i) isPr[j] = 1;
            if(fr[i]) {
                int crt = 0;
                for(int j = i; j <= NRMAX; j += i) crt += fr[j], fr[j] = 0;
                if(crt) st.insert(i), cnt += crt;
            }
        }
    printf("%d\n", (int)st.size());
    for(const auto &el : st) printf("%d\n", el);
    return 0;
}