Cod sursa(job #121208)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 7 ianuarie 2008 23:20:22
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <stdio.h>

const int N_MAX = 100010;

int v[N_MAX], is[N_MAX * 10], cate[N_MAX * 10];

int prim[] = {2, 3, 5, 7, 11, 13, 17};

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

	int N, i, MAX = 0, j;

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

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

	int comb, rez = 0, nrb, P;

	MAX = 1 << 7;
	for (comb = 1; comb < MAX; comb ++) {

		P = 1, nrb = 0;
		for (i = 0; i < 7; i ++) {
			if (comb & (1 << i)) P *= prim[i], nrb ++;
		}

		if (nrb % 2 == 1) rez += (cate[P] * (cate[P] - 1) / 2);
		else rez -= (cate[P] * (cate[P] - 1) / 2);
	}

	printf("%d\n", (N * (N - 1) / 2) - rez);

	return 0;
}