Cod sursa(job #213335)

Utilizator ada_sAda-Mihaela Solcan ada_s Data 9 octombrie 2008 14:57:02
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#include <vector>
using namespace std;
const long N=1000010;

vector <bool> m(N,false);
long long n, nr[N], v[N], sol, max;

void read()
{
	long t, i;
	freopen("pairs.in","r",stdin);
	freopen("pairs.out","w",stdout);
	scanf(" %ld", &n);
	max=N;
	for (i=1; i<=n; ++i)
	{
		scanf("%ld", &t);
		if (max<t)
			max=t;
		m[t] = true;
	}//for i
}//read

inline long long combinari(long long x)
{
	return (long long)(x*(x-1)/2);
}//combinari

void solve()
{
    long long i, j;
    sol=combinari(n);
	for (i = 2; i <= N; ++i)
	{
		if (nr[i] == -1)
			continue;
		if (nr[i] == 0)
			for (j = i; j <= max; j+=i)
			{
				if (nr[j]!=-1)
				  ++nr[j];
			}//for j
		int k = i*i;
		for (j = i; j <= N; j+=i)
			++nr[j];
		for (j = i; j <= N; j+=k)
			nr[j] = -1;
		if (nr[i]%2 == 0)
			sol+=combinari(v[i]);
		else
			sol-=combinari(v[i]);
		
	}//for i
}//solve

void print()
{
	printf("%lld\n", sol);
}//print
	
int main()
{
	
	read();
	solve();
	print();
	return 0;
}//main