Cod sursa(job #214465)

Utilizator MirageRobert Sandu Mirage Data 14 octombrie 2008 17:38:15
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include<stdio.h>
#define max(a,b) a>b?a:b
#define N 1000001
int i,j,x,maxim,div[N],w[N];
long long n,r,y;
char v[N],p[N];
int main(){
	freopen("pairs.in", "rt", stdin);
	freopen("pairs.out", "wt", stdout);
	scanf("%lld",&n);
	for(i=1;i<=n;++i){
		scanf("%d",&x);
		maxim=max(maxim,x); 
		v[x]=1;
	}
	for(i=2;i*i<=maxim;++i)
		if(!p[i])
			for(j=2;j*i<=maxim;++j)
				p[j*i]=1;
	p[1]=1;
	for(i=1;i<=maxim;++i){
		for(j=1;i*j<=maxim;++j){
			if(v[i*j]==1)
				++div[i] ;
			if(!p[i])
				if(j%i!=0)
					++w[i*j];
				else
					w[i*j]=-N;
		}
	}
	for(i=2;i<=maxim;++i){
		y=div[i]; 
		y=(y*(y+1))/2;
		if(w[i]>0)
			if(w[i]%2==0)
				r-=y;
			else
				r+=y;
	}
	printf("%lld\n",(n*(n+1))/2-r);
	return 0;
}