Cod sursa(job #304006)

Utilizator ooctavTuchila Octavian ooctav Data 10 aprilie 2009 18:15:38
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#include <stdlib.h>


int e[2000005];
int b[2000004];
int maxim=-300000;
void ciur()
{
	long long i,j;
	b[1]=-1;
	for(i=2;i<=maxim;i++)
		if(b[i]==0)
			for(j=i;j<=maxim;j=j+i)
				if(b[j]!=-1)
				{
					b[j]++;
					if((j/i)%i==0)
						b[j]=-1;
				}
}
int main()
{
	long long i,j,bar,copiei,nr,div,n,a;
	long long d=0;
	FILE *f1,*f2;
	f1=fopen("pairs.in","r");
	f2=fopen("pairs.out","w");
	fscanf(f1,"%lld",&n);
	for(i=1;i<=n;i++)
	{
		fscanf(f1,"%lld",&a);
		if(a>maxim)
			maxim=a;
		e[a]=true;
	}
	ciur();
	for(i=2;i<=maxim;i++)
	{
		div=0;
		if(b[i]==-1)
			continue;
		if(b[i]==0)
			while(1)
			{
				a++;
				a--;
			}
		else
			for(j=i;j<=maxim;j=j+i)
				if(e[j])
					div++;
		if(b[i]%2==1)
			d=d+div*(div-1)/2;
		else
			d=d-div*(div-1)/2;

	}
	d=n*(n-1)/2-d;
	fprintf(f2,"%lld",d);
	fclose(f1);
	fclose(f2);

	return 0;
}