Cod sursa(job #1946361)

Utilizator vladvlad00Vlad Teodorescu vladvlad00 Data 30 martie 2017 09:04:27
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <fstream>

using namespace std;

FILE * fin=fopen("pairs.in","r");
FILE * fout=fopen("pairs.out","w");

bool  v[1000005];
int p[1000005];
long long n, maxim, nr;

void ciur();
int ok(int x);

int main()
{
	int i, j, x, aux;
	long long rez = 0;

	fscanf(fin, "%lld", &n);
	for (i = 1; i <= n; i++)
	{
		fscanf(fin, "%d", &x);
		v[x] = 1;
		if (x > maxim)
			maxim = x;
	}
	ciur();
	for (i = 2; i*i <= maxim; i++) 
		for (j = i*i; j <= maxim; j += i*i)
			p[j] = -1;
	for (i = 2; i <= maxim; i++)
	{
		if (p[i] == -1)
			continue;
		nr = 0;
		for (j = i; j <= maxim; j += i)
			nr += v[j];
		aux = p[i];
		if (aux % 2) 
			rez += nr*(nr - 1) / 2;
		else
			rez -= nr*(nr - 1) / 2;
	}
	fprintf(fout, "%lld\n", n*(n-1)/2-rez);
	return 0;
}

void ciur()
{
	long long i, j;

	for (i=2;i<=maxim;i++)
		if (!p[i])
		{
			for (j = i; j <= maxim; j += i)
				p[j]++;
		}
}