Cod sursa(job #2985045)

Utilizator Zed1YasuoAlex Birsan Zed1Yasuo Data 25 februarie 2023 16:27:59
Problema Indep Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <vector>
#include <cmath>
///fara numere mari
#define ll long long
using namespace std;
ifstream f("indep.in");
ofstream g("indep.out");
int n,a[1005],x,ciur[1005];
ll d[1005];
int ex[1000];
vector<int>fct;
int main()
{
    f>>n;
    for(int i=2;i*i<=1000;i++)
        if(ciur[i]==0)
            for(int j=i*i;j<=1000;j+=i)
                ciur[j]=true;
    for(int i=1;i<=n;i++)
    {
        f>>x;
        for(int j=1;j*j<=x;j++)
            if(x%j==0)
                a[j]++,a[x/j]++;
        if(sqrt(x)==int(sqrt(x)))
            a[int(sqrt(x))]--;
    }
    for(int i=1;i<=1000;i++)
        if(a[i])
            d[i]=(1<<a[i])-1;
    for(int i=2;i<=1000;i++)
        if(a[i]&&ciur[i]==0)
            fct.push_back(i);
    int all=(1<<fct.size());
    ll ans=d[1];
    for(int i=1;i<all;i++)
    {
        int bits=0;
        ll r=1;
        for(int j=0;j<fct.size();j++)
            if(i&(1<<j))
            {
                bits++;
                r*=fct[j];
            }
        if(bits%2)
            ans-=d[r];
        else
            ans+=d[r];
    }
    g<<ans;
    return 0;
}