Cod sursa(job #1892736)

Utilizator cipri321Marin Ciprian cipri321 Data 25 februarie 2017 11:20:29
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>

using namespace std;
ifstream fi("pairs.in");
ofstream fo("pairs.out");
int n;
int i,j;
bool F[1000001],E[1000001];
int A[100001],P[100001],k,X[1000001];
int maxv;
bool ok;
int nrd;
int rez,e,x;
int main()
{
    fi>>n;
    for(i=1;i<=n;i++)
    {
        fi>>A[i];
        F[A[i]]++;
        if(maxv<A[i])
            maxv=A[i];
    }
    for(i=1;i<=maxv;i++)
        for(j=1;i*j<=maxv;j++)
            if(F[i*j]>0)
                X[i]++;
    for(i=1;i<=maxv;i++)
        E[i]=true;
    for(i=2;i<=maxv;i++)
        if(E[i])
        {
            P[++k]=i;
            for(j=i+i;j<=maxv;j+=i)
                E[j]=false;
        }
    for(i=2;i<=maxv;i++)
    {
        j=1,ok=true,nrd=0;
        x=i;
        while(P[j]*P[j]<=x)
        {
            e=0;
            while(x%P[j] == 0)
            {
                e++;
                x/=P[j];
            }
            if(e>1)
                ok=false;
            if(e==1)
                nrd++;
            j++;
        }
        if(x>1)
            nrd++;
        if(ok)
            if(nrd%2==0)
                rez-=X[i]*(X[i]-1)/2;
            else
                rez+=X[i]*(X[i]-1)/2;
    }
    fo<<n*(n-1)/2-rez;
    fi.close();
    fo.close();
    return 0;
}