Cod sursa(job #1410509)

Utilizator alexandra_udristoiuUdristoiu Alexandra Maria alexandra_udristoiu Data 31 martie 2015 09:03:50
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 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;
			}
		}
		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;
}