Cod sursa(job #1548192)

Utilizator SilviuIIon Silviu SilviuI Data 10 decembrie 2015 17:26:47
Problema Pairs Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <stdio.h>
#include <algorithm>
#define nmax 100010
#define lmax 1000010
using namespace std;
int t[lmax],n,i,j,x,maxx,b[lmax],nr[lmax],comb[nmax][3];
long long sol;
int main() {
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++) {
    scanf("%d",&x); b[x]=1; maxx=max(maxx,x);
}
comb[0][0]=1;
for (i=1;i<=n;i++) {
    comb[i][0]=1;
    for (j=1;j<=2;j++) comb[i][j]=comb[i-1][j-1]+comb[i-1][j];
}
for (i=2;i<=maxx;i++)
    if (nr[i]==0) {
        for (j=i;j<=maxx;j+=i) nr[j]++;
    }
for (i=2;i*i<=maxx;i++)
    for (j=i*i;j<=maxx;j+=i*i) nr[j]=0;
for (i=2;i<=maxx;i++)
    if (nr[i]>0) {
       int l=0;
       for (j=i;j<=maxx;j+=i) l+=b[j];
       if (nr[i]%2==1) sol=sol+comb[l][2]; else
        sol=sol-comb[l][2];
    }
sol=(1LL*n*(n-1))/2-sol;
printf("%lld",sol);
return 0;
}