Cod sursa(job #2311697)

Utilizator richard26Francu Richard richard26 Data 3 ianuarie 2019 16:35:11
Problema Pairs Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>
#define N 1000005
using namespace std;

ifstream f("pairs.in");
ofstream g("pairs.out");

int a[100005], v[N], nr[N];
bool viz[N];
long long b[N];

int main()
{	
	long long i, j, maxi = 0, n, rez;
	f>>n;
	for(i = 1;i <= n; i++)
	{		
		f>>a[i];
		viz[a[i]] = 1;
		if (a[i] > maxi) maxi = a[i];
	}
	for (i = 2; i <= maxi; i++)
		for (j = i; j <= maxi; j+= i)
		{
			if(viz[j] == 1) b[i]++;
		}

	for (i = 1; i <= maxi; i++) nr[i] = 1;
	for (i = 2; i * i <= maxi; i++)
		for (j = 2; j <= maxi / i; j++)
			nr[i * j] = nr[i] + nr[j];

	for (i = 2; i <= maxi; i++)
	{
		if(nr[i] == 1 && i <= 1000)
			v[i * i] = 1;
		if(v[i] == 1)
		{
			for (j = 2; j <= maxi / i; j++)
				v[i * j] = 2;
		}
	}
	rez = n * (n - 1) / 2;

	for (i = 2; i <= maxi; i++)
	{
		if(v[i] == 0)
		{
			if(nr[i] % 2 == 0)
			{
				rez = rez + b[i] * (b[i] - 1) / 2;
			}
			else rez = rez - b[i] * (b[i] - 1) / 2;
		}
	}

	g<<rez;
	return 0;

}