Cod sursa(job #347190)

Utilizator freak93Adrian Budau freak93 Data 11 septembrie 2009 13:18:21
Problema Pairs Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<fstream>
#include<bitset>

using namespace std;

const char iname[]="pairs.in";
const char oname[]="pairs.out";
const int maxv=1000005;

ifstream f(iname);
ofstream g(oname);

bitset<maxv> a;

int n,k,x,X[maxv],divz[maxv];

long long max(long long a,int b)
{
    if(a>b)
        return a;
    return b;
}

long long i,j,t,maxt;

int main()
{
    f>>n;
    for(i=1;i<=n;++i)
        f>>x,a[x]=1,maxt=max(maxt,x);

    for(i=2;i<=maxt;++i)
        for(j=i;j<=maxt;j+=i)
            X[i]+=a[j];

    for(i=2;i<=maxt;++i)
    if(divz[i]==0){
        divz[i]=1;
        for(j=i*i;j<=maxt;j+=i*i)
            divz[j]=-1;
        for(j=i+i;j<=maxt;j+=i)
            if(divz[j]>=0)
                ++divz[j];
    }

    for(i=2;i<=maxt;++i)
        if(divz[i]>0)
            if(divz[i]&1)
                t+=X[i]*(X[i]-1)/2;
            else
                t-=X[i]*(X[i]-1)/2;

    t=n*(n-1)/2-t;

    g<<t<<"\n";

    f.close();
    g.close();

    return 0;
}