Cod sursa(job #1410517)

Utilizator alexandra_udristoiuUdristoiu Alexandra Maria alexandra_udristoiu Data 31 martie 2015 09:09:02
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<fstream>
#include<bitset>
using namespace std;
int n, i, j, maxim, x, u, u1;
long long sum;
bitset<1000001> c, f;
int s[1000001], p[1000001], nr[1000001];
ifstream fin("pairs.in");
ofstream fout("pairs.out");
int main(){
	fin>> n;
	for(i = 1; i <= n; i++){
		fin>> x;
		f[x] = 1;
		maxim = max(maxim, x);
	}
	u = 1;
	s[1] = 1;
	for(i = 2; i <= maxim; i++){
		for(j = i; j <= maxim; j += i){
			if(f[j] == 1){
				p[i]++;
			}
			if(c[i] == 0 && i != j){
				c[j] = 1;
			}
		}
		if(c[i] == 0){
			u1 = u;
			for(j = 1; j <= u1; j++){
				u++;
				s[u] = s[j] * i;
				nr[u] = nr[j] + 1;
				if(s[u] <= maxim){
					if(nr[u] % 2 == 1){
						sum += (p[s[u]] - 1) * 1LL * p[s[u]] / 2;
					}
					else{
						sum -= (p[s[u]] - 1) * 1LL * p[s[u]] / 2;
					}
				}
				else{
					u--;
				}
			}
		}
	}
	sum = (n - 1) * n / 2 - sum;
	fout<< sum <<"\n";
	return 0;
}