Cod sursa(job #772417)

Utilizator GigelDaTesteTestulSuprem GigelDaTeste Data 29 iulie 2012 16:48:58
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<fstream>
#define dim 1000700
using namespace std;


ifstream f("pairs.in");
ofstream g("pairs.out");

long long nrdp[dim],x,n,C[dim],i,j,p[dim],NU[dim],MAX;
long long res;
long long max(long long a,long long b){
	if(a<b)
		return b;
	return a;
}
int main (){
	
	f>>n;
	
	MAX=-1;
	for(i=1;i<=n;i++){
		f>>x;
		C[x]++;
		MAX=max(MAX,x);
	}
	res=(long long)n*(n-1)/2;
	for(i=2;i<MAX;++i){
		
		for(j=2*i;j<MAX;j+=i){
			
			C[i]+=C[j];
			
		}
		if(!p[i]){
			nrdp[i]=1;
			p[i]=1;
			for(j=2*i;j<MAX;j+=i) {
				p[j]=1;
				if((j/i)%i==0)
					NU[j]=1;
				nrdp[j]^=1;
			}
			
		}
		if(!NU[i]){
			
			if(nrdp[i])
				res-=(long long )C[i]*(C[i]-1)/2;
			else
				res+=(long long )C[i]*(C[i]-1)/2;
			
		}
	}
	
	g<<res<<"\n";
	return 0;
}