Cod sursa(job #2677103)

Utilizator stefdascalescuStefan Dascalescu stefdascalescu Data 25 noiembrie 2020 20:01:07
Problema Pairs Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<bits/stdc++.h>
#define god dimasi5eks
#pragma GCC optimize("O3")
#define fi first
#define se second
#define pb push_back
#define pf push_front
 
#define fisier 1
 
using namespace std;
 
typedef long long ll;
 
const int mod = 1000000007;
const double dancila = 3.14159265359; // PI 
const double eps = 1e-9;
 
int n, val, mx;
bool fr[1000002], viz[1000002];

int prim[1000002];

ll ans;
 
 
int main()
{
	#ifdef fisier
		ifstream cin("pairs.in");
		ofstream cout("pairs.out");
	#endif
	
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	
	cin >> n;
	for(int i = 1; i <= n; ++i)
	{
		cin >> val;
		fr[val] = 1;
		mx = max(mx, val);
	}
	
	for(int i = 2; i <= mx; ++i)
	{
		if(!viz[i])
		{
			bool ad = 0;
			if(!prim[i])
				ad = 1;
			int cnt = 0;
			for(int j = i; j <= mx; j += i)
			{
				if(ad)
				{
					prim[j] += ad;
					if(j % (i*i) == 0)
						viz[j] = 1;
				}
				cnt += fr[j];
			}
			if(!viz[i])
			{
				if(prim[i] % 2 == 1)
					ans += (1LL * (cnt - 1) * cnt) / 2;
				else
					ans -= (1LL * (cnt - 1) * cnt) / 2;
			}
		}
	}
	
	cout << 1LL * n * (n-1) / 2 - ans;
	return 0;
}