Cod sursa(job #335285)

Utilizator ConsstantinTabacu Raul Consstantin Data 29 iulie 2009 12:59:46
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<stdio.h>

int a[1000010],Max,n,res;
void solve(){
int i,j,m;

if(a[1]==-1)res+=n;

for(i=2;i<=Max;i++)
	if(a[i]==0){m=0;
		for(j=2*i;j<=Max;j+=i)
			if(a[j]<0){a[j]--;m++;}
			else
				a[j]=1;
		res+=(m*(m-1))/2;}
	else
		if(a[i]==-1){
		m=1;
		for(j=2*i;j<=Max;j+=i)
			if(a[j]==0)a[j]=1;
			else
			if(a[j]<0){m++;a[j]--;}
		
		res+=(m*(m-1))/2;
		}
	else
		if(a[i]<-2){
		m=1;
		for(j=2*i;j<=Max;j+=i)
			if(a[j]==0)a[j]=1;
			else
			if(a[j]<0){m++;a[j]--;}
		m=(m*(m-1))/2;
		m*=-a[i]-1;
		res-=m;
		}
}
		
int main(){

freopen("pairs.in","r",stdin);

freopen("pairs.out","w",stdout);

scanf("%d",&n);

int x,i;
for(i=1;i<=n;++i)
	{scanf("%d",&x);
	a[x]=-1;
	if(x>Max)Max=x;
	}
	
solve();
n=(n*(n-1))/2;
n-=res;
printf("%d",n);


return 0;}