Cod sursa(job #213314)

Utilizator tudalexTudorica Constantin Alexandru tudalex Data 9 octombrie 2008 13:46:56
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#include <vector>
using namespace std;

vector <bool> m;

void read()
{
	freopen("pairs.in","r",stdin);
	freopen("pairs.out","w",stdout);
	scanf(" %d", &n);
	m.resize(1000020);
	for (i = 1; i <= n; ++ i)
	{
		scanf("%d", &t);
		v[t] =1;
	}
}
inline long long combinari(long long x)
{
	return x*(x-1)/2;
}

void solve()
{

	for (i = 2; i <= 1000000; ++i)
	{
		if (nr[i] == -1)
			continue;
		if (nr[i] == 0)
			for (j = i; j <= 1000000; j+=i)
			{
				++nr[j];
				if (m[j]) 
					++v[i];
			}
		int k = i*i;
		for (j = i; j <= 1000000; j+=i)
		{
			//++nr[
			if(m[j])
				++v[i];
		}
		for (j = i; j <= 1000000; j+=k)
			nr[j] = -1;
		if (v[i]%2 == 0)
			sol-=combinari(v[i]);
		else
			sol+=combinari(v[i]);
		
	}
}
void print()
{
	printf("%lld\n", sol);
}
	
		

}
int main()
{
	
	read();
	solve();
	print();
	return 0;
}