Cod sursa(job #645002)

Utilizator cosmyoPaunel Cosmin cosmyo Data 7 decembrie 2011 22:53:37
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#include <iostream>
using namespace std;
const int N = 100005;
const int V = 1000005;
int a[N], v[V], n, MAX;
int p[V];
bool o[V];
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]] = true;
	}

	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];
			if(1LL * i * i <= 1LL * MAX)
			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;
}