Cod sursa(job #3260735)

Utilizator Nasa1004Ema Nicole Gheorghe Nasa1004 Data 3 decembrie 2024 16:07:30
Problema Indep Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>
#include <set>
#include <vector>

using namespace std;
const int NMAX = 500;
using ll = long long;
#define int ll

ifstream cin("indep.in");
ofstream cout("indep.out");

int v[NMAX + 2];
set <int> s;
vector <int> d;
signed main()
{
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> v[i];
        int a = v[i], div = 2;
        while(div * div <= a) {
            int exp = 0;
            while(a % div == 0) {
                a /= div;
                exp++;
            }
            if(exp > 0)
                s.insert(div);
            div++;
        }
        if(a > 1)
            s.insert(a);
    }
    for(auto x : s)
        d.push_back(x);

    int ans = 0;
    for(int mask = 1; mask < (1 << d.size()); mask++) {
        int div = 1, nrbiti = 0;
        for(int i = 0; i < d.size(); i++) {
            if(mask & (1 << i)) {
                nrbiti++;
                div *= d[i];
            }
        }
        int cnt = 0;
        for(int i = 1; i <= n; i++) {
            if(v[i] % div == 0)
                cnt++;
        }
        int sum = (1 << cnt) - 1;
        if(nrbiti % 2)
            ans += sum;
        else
            ans -= sum;
    }
    ans = ((1 << n) - 1) - ans;
    cout << ans;
    return 0;
}