Cod sursa(job #2346764)

Utilizator vladcoroian2001Vlad Coroian vladcoroian2001 Data 18 februarie 2019 08:34:59
Problema Pairs Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fi("pairs.in");
ofstream fo("pairs.out");
const int NMAX=1e6+5;
int n,x[NMAX],F[NMAX],in[NMAX],S[NMAX],mx,m,fct[NMAX],rez;
vector <int> v;
int par(int x)
{
    if(x%2) return 1;
    return -1;
}
int main()
{
    fi>>n;
    for(int i=1;i<=n;i++)
    {
        fi>>x[i];
        S[x[i]]=1;
        mx=max(x[i],mx);
    }
    for(int i=2;i<=mx;i++)
        if(!F[i])
        {
            for(int j=i;j<=mx;j+=i)
            {
                if(S[j] && !in[i])
                {
                    in[i]=1;
                    fct[i]=1;
                    v.push_back(i);
                }
                F[j]=1;
            }
            F[i]=1;
        }
    m=v.size();
    for(int i=0;i<m;i++)
    {
        int sz=v.size();
        for(int j=i+1;j<sz;j++)
            if(v[i]*v[j]<=mx && v[j]%v[i] && !fct[v[i]*v[j]])
            {
                fct[v[i]*v[j]]=fct[v[i]]+fct[v[j]];
                v.push_back(v[i]*v[j]);
            }
    }
    sort(v.begin(),v.end());
    for(int i=2;i<=mx;i++)
        if(fct[i])
            for(int j=i;j<=mx;j+=i)
                if(S[j])
                    rez+=par(fct[i]);
    fo<<rez<<"\n";
    fi.close();
    fo.close();
    return 0;
}