Cod sursa(job #486261)

Utilizator Addy.Adrian Draghici Addy. Data 20 septembrie 2010 21:08:09
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <cstdio>

#define MAX 1000005

int nr[MAX], n, i, j, x;
char P[MAX], p[MAX], viz[MAX];
long long sol;

int main () {
	
	freopen ("pairs.in", "r", stdin);
	freopen ("pairs.out", "w", stdout);
	
	scanf ("%d", &n);
	for (i = 1; i <= n; i++) {
		scanf ("%d", &x);
		nr[x]++;
	}
	
	sol = 1LL * n * (n-1) / 2;
	for (i = 1; i < MAX; i++) {
		for (j = 2 * i; j < MAX; j += i)
			nr[j] += nr[i];
		
		if (!P[i]) {
			p[i] = 1;
			for (j = 2 * i; j < MAX; j += i) {
				P[j] = 1, p[j] ^= 1;
				if ((j/2) % 2 == 0) viz[j] = 1;
			}
		}
		
		if (viz[j] == 1) continue;
		
		if (p[i])
			sol -= 1LL * nr[i] * (nr[i]-1) / 2;
		else
			sol += 1LL * nr[i] * (nr[i]-1) / 2;
	}
	
	printf ("%lld", sol);
	
	return 0;
}