Cod sursa(job #606362)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 3 august 2011 22:08:01
Problema Pairs Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>

using namespace std;

bool v[1000001];
int d[1000001];

int main()
{
    int m=0,n,i,j,x,t;
    long long sol;
    freopen("pairs.in","r",stdin);
    freopen("pairs.out","w",stdout);
    scanf("%d\n",&n);
    sol=n*(n-1)/2;
    for (i=1;i<=n;++i)
    {
        scanf("%d",&x);
        v[x]=1;
        if (x>m)
            m=x;
    }
    for (i=2;i<=m;++i)
        if (!d[i])
            for (j=i;j<=m;j+=i)
                ++d[j];
    for (i=2;i*i<=m;++i)
        for (j=i*i;j<=m;j+=i*i)
            d[j]=-1;
    for (i=2;i<=m;++i)
        if (d[i]!=-1)
        {
            t=0;
            for (j=i,t=0;j<=m;j+=i)
                if (v[j])
                    ++t;
            sol-=((d[i]%2)*2-1)*t*(t-1)/2;
        }
    printf("%lld\n",sol);
    return 0;
}