Cod sursa(job #114353)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 13 decembrie 2007 21:30:36
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>

const int N_MAX = 100010;
const int V_MAX = 1000010;

int N, MAX = 0;
int x[V_MAX], is[V_MAX];
int fact[] = {2, 3, 5, 7, 11, 13, 17, 19};

int main()
{
	freopen("pairs.in", "r", stdin);
#ifndef _SCREEN_
	freopen("pairs.out", "w", stdout);
#endif

	int i, val, j;
	long long rez = 0;

	scanf("%d\n", &N);

	for (i = 1; i <= N; i ++) {
		scanf("%d\n", &val);
		if (val > MAX) MAX = val;
		is[val] = 1;
	}

	for (i = 2; i <= MAX; i ++) {
		for (j = i; j <= MAX; j += i) {
			if (is[j]) x[i] ++;
		}
	}

	int comb, mx = 1 << 7, fac, nr;
	for (comb = 1; comb < mx; comb ++) {

		fac = 1, nr = 0;
		for (i = 0; i < 7; i ++) {
			if (comb & (1 << i)) fac *= fact[i], nr ++;
		}

		if (nr % 2 == 1) rez += (x[fac] * (x[fac] - 1) / 2);
		else rez -= (x[fac] * (x[fac] - 1) / 2);
	}

	long long kkt = N;
	kkt = (long long) (kkt * (N - 1));
	kkt /= 2;
	printf("%lld\n", kkt - rez);

	return 0;
}