Cod sursa(job #1410393)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 31 martie 2015 00:54:37
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<cstdio>
int n,i,j,a,vmax,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",&a);
        vmax=maxim(vmax,a);
        x[a]=1;
    }
    for(i=2;i<=vmax;i++){
        if(y[i]&&y[i]!=-1){
            a=0;
            for(j=i;j<=vmax;j+=i){
                a+=x[j];
            }
            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){
                a+=x[j];
            }
            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;
}