Cod sursa(job #114756)

Utilizator FlorianFlorian Marcu Florian Data 15 decembrie 2007 18:14:29
Problema Pairs Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<stdio.h>
#include<string.h>
FILE*f=fopen("pairs.in","r");
FILE*g=fopen("pairs.out","w");
long *x=new long[1000003], a[100002], n, rez, Max;
char *m=new char[1000003];
void read()
	{
	fscanf(f,"%ld",&n);
	memset(m,'0',sizeof(m));
	for(int i=1;i<=n;++i)
		{
		fscanf(f,"%ld",&a[i]),m[a[i]]='1';
		if(Max<a[i]) Max=a[i];       }
	}
void creez()
	{
	int i;
	int j;
	for(i=2;i<=Max;++i)
		{
		j=1;
		while(i*j<=((Max/i))*i)
			{
			if(m[i*j]=='1') x[i]++;
			++j;
			}

		}
	}
void rezolv()
	{
	long i,j,r,p,ok, X;
	for(long k=1;k<=Max;++k)
		{
		X=k;
		p=0;
		ok=1;
		for(i=2;i*i<=X;++i)
			{
			if(X%i==0)
				{++p;
				for(r=0;X%i==0;X=X/i,++r);
				if(r>1) { ok=0; break;}
				}
			}
		if(ok==1)
			{
			if(X>1) p++;
			if(p%2==1) rez=rez+(x[k]*(x[k]-1))/2;
			else rez=rez-(x[k]*(x[k]-1))/2;
			}
		}
	fprintf(g,"%ld",(n*(n-1)/2)-rez);
	}
int main()
	{
	read();
	creez();
	rezolv();
	return 0;
	}