Cod sursa(job #3305121)

Utilizator InformaticianInDevenire1Munteanu Mihnea Gabriel InformaticianInDevenire1 Data 30 iulie 2025 10:04:32
Problema Indep Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <bits/stdc++.h>
#define int long long

using namespace std;

ifstream fin ("indep.in");
ofstream fout ("indep.out");

bool IsPrime [1002];
vector <int> primes;
int pr[1002];
int v[505];
int nrdiv[1002];

void Ciur(){
    IsPrime[0] = 0;
    IsPrime[1] = 0;
    pr[1] = 1;
    for (int i=2;i<=1000;++i){
        IsPrime[i] = 1;
        pr[i] = 1;
    }
    for (int i=2;i<=1000;++i){
        if (IsPrime[i]==1){
            pr[i] *= i;
            for (int j=2*i;j<=1000;j+=i){
                IsPrime[j] = 0;
                pr[j] *= i;
            }
        }
    }
    for (int i=2;i<=1000;++i){
        if (IsPrime[i]==1) primes.push_back(i);
    }
}

signed main()
{
    Ciur();
    int n;
    fin >> n;
    for (int i=1;i<=n;++i){
        fin >> v[i];
        for (int j=1;j<=v[i];++j){
            if (v[i]%j==0){
                nrdiv[j]++;
            }
        }
    }
    int ans = 0;
    for (int i=1;i<=1000;++i){
        if (i!=pr[i]) continue;
        int nr = 0;
        int I = i;
        for (auto x:primes){
            if (I%x==0){
                nr++;
            }
            while(I%x==0){
                I /= x;
            }
        }
        if (I>1) nr++;
        int semn = 1;
        if (nr%2==1) semn = -1;
        if (nrdiv[i]==0) continue;
        ans += (1LL<<nrdiv[i])*semn;
    }
    fout << ans;
    return 0;
}