Cod sursa(job #111628)

Utilizator swift90Ionut Bogdanescu swift90 Data 1 decembrie 2007 16:33:29
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>
int ap[2000100],div[2000100];
int main(){
	freopen("pairs.in","r",stdin);
	freopen("pairs.out","w",stdout);
	int n,i,j,k,max;
	long long apar,res=0;
	scanf("%d",&n);
	max=0;
	for(i=0;i<n;++i){
		scanf("%d",&j);
		ap[j]=1;
		if(j>max)
			max=j;
	}
	
	for(i=2;i<=max;++i){
		if(div[i]>0){
			if(div[i]%2){
				apar=0;
				for(j=i;j<=max;j+=i){
					if(ap[j])
						++apar;
				}
				res+=(apar*(apar-1))/2;
			}
			else{
				apar=0;
				for(j=i;j<=max;j+=i){
					if(ap[j])
						++apar;
				}
				res-=(apar*(apar-1))/2;
			}
		}
		if(div[i]==0){
			apar=0;
			for(j=i;j<=max;j+=i){
				++div[j];
				if(ap[j])
					++apar;
			}
			for(j=i*i;j<=max;j*=i){
				for(k=j;k<=max;k+=j)
					div[k]=-10000000;
			}
			res+=(apar*(apar-1))/2;
		}
	}
	apar=((long long)(n))*(n-1);
	apar/=2;
	res=apar-res;
	printf("%lld\n",res);
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}