Cod sursa(job #644998)

Utilizator cosmyoPaunel Cosmin cosmyo Data 7 decembrie 2011 22:43:33
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
#include <iostream>
using namespace std;
const int N = 100005;
int a[N], o[N * 10], v[N * 10], n, MAX;
char p[N * 10];
long long rez = 0;

int main(){
	ifstream fin("pairs.in");
	ofstream fout("pairs.out");
	int i, j;
	fin >> n;
	for(i = 1; i <= n; ++i)
		fin >> a[i], o[a[i]] = 1;
	for(i = 1; i <= n; ++i)
		if(a[i] > MAX)
			MAX = a[i];

	for(i = 2; i <= MAX; ++i){
		for(j = i; j <= MAX; j += i)
			if(o[j])
				++v[i];
	}
	
	for(i = 2; i <= MAX; ++i)
		if(p[i] == 0){
			for(j = i + i; j <= MAX; j += i)
				if(p[j] != -1)
					++p[j];
			for(j = i * i; j <= MAX; j += i * i)
				p[j] = -1;
		}
			
	rez = 1LL * n * (n - 1);	rez /= 1LL * 2;
	for(i = 2; i <= MAX; ++i)
		if(p[i] >= 0){
			if(p[i] == 0)
				p[i] = 1;
			if(p[i] % 2)
				rez -= 1LL * ((1LL * v[i] * (v[i] - 1)) / 2);
			else
				rez += 1LL * ((1LL * v[i] * (v[i] - 1)) / 2);
		}
	fout << rez << '\n';

	return 0;
}