Cod sursa(job #127556)

Utilizator swift90Ionut Bogdanescu swift90 Data 24 ianuarie 2008 12:38:17
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 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,max,k;
	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];
			}
			if(i<1500){
				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;
}