Cod sursa(job #1410387)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 31 martie 2015 00:48:00
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<cstdio>
int n,i,j,a,vmax,v[100100],x[1001000],y[1001000];
long long s;
FILE *f,*g;
int maxim(int a,int b){
    if(a>b)
        return a;
    return b;
}
int main(){
    f=fopen("pairs.in","r");
    g=fopen("pairs.out","w");
    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++){
        fscanf(f,"%d",&v[i]);
        vmax=maxim(vmax,v[i]);
        x[ v[i] ]=1;
    }
    for(i=2;i<=vmax;i++){
        if(y[i]>1){
            a=0;
            for(j=i;j<=vmax;j+=i){
                if(x[j])
                    a++;
            }
            if(y[i]%2)
                s-=1LL*a*(a-1)/2;
            else
                s+=1LL*a*(a-1)/2;
        }
        if(y[i]==0){
            a=0;
            for(j=i;j<=vmax;j+=i){
                if(x[j])
                    a++;
            }
            for(j=i+i;j<=vmax;j+=i){
                if(y[j]!=-1)
                    y[j]++;
                if( j % (i*i) == 0 )
                    y[j]=-1;
            }
            s+=1LL*(a-1)*a/2;
        }
    }
    fprintf(g,"%lld",1LL*n*(n-1)/2-s);






    fclose(f);
    fclose(g);
    return 0;
}