Cod sursa(job #111605)

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