Cod sursa(job #111787)

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