Cod sursa(job #2304978)

Utilizator flibiaVisanu Cristian flibia Data 18 decembrie 2018 21:56:38
Problema Pairs Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>
#define ll long long

using namespace std;

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

int n, a[100100], st[100], vf;
ll freq[1000100], rs;

int main() {
	in >> n;
	for (int i = 1; i <= n; i++) 
		in >> a[i];
	for (int i = 1; i <= n; i++)
		for (int j = 1; j * j <= a[i]; j++)
			if (a[i] % j == 0) {
				freq[j]++;
				if (j != a[i] / j)
					freq[a[i] / j]++;
			}
	for (int i = 1; i <= n; i++) {
		vf = 0;
		for (int j = 2; j * j <= a[i]; j++) {
			if (a[i] % j)
				continue;
			st[vf++] = j;
			while (a[i] % j == 0)
				a[i] /= j;
		}
		if (a[i] > 1)
			st[vf++] = a[i];
		for (int mask = 1; mask < (1 << vf); mask++) {
			int num = 1, cnt = 0;
			for (int bit = 0; bit < vf; bit++)
				if (mask & (1 << bit)) {
					num *= st[bit];
					cnt++;
				}
			if (cnt & 1)
				rs += freq[num] - 1LL;
			else rs -= freq[num] - 1LL;
		}
	}
	out << ((ll) n * ((ll) n - 1LL) - rs) / 2LL;
	return 0;
}