Cod sursa(job #111906)

Utilizator gr33nhumbVoicu Gabriel gr33nhumb Data 2 decembrie 2007 14:14:52
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<fstream.h>
#include<math.h>

long v[100001],x[1000001];
long n;


int main(){
 int t;
 long i,j,max,p,res=0,q,k;

ifstream f("pairs.in");
ofstream g("pairs.out");
  f>>n;
  max=-1;
  for(i=1;i<=n;i++){   f>>q;
		       v[q]=1; if(q>max) max=q;
		   }

  for(i=1;i<=max;i++){
       for(j=1;j<=(max/i)*i;j++){
	    if(v[i*j]==1) x[i]++;
	}
   }

  for(i=2;i<=max;i++){
     p=i;
     if(x[p]){
	 t=0;

	   if(p==2){ t++; p/=2;}
	   else if(p==3){ t++; p/=3;}
	   else{ k=2;
	   while(k<=sqrt(i) || p!=1){
	     if(p%k==0){ if((p/k)%k==0) break;
			 t++;
			 p=p/k;
		       }
			 k++;
				}
	       }

	    if(p==1) { if(t%2==0) res-=(x[i]*(x[i]-1))/2;
		       else res+=(x[i]*(x[i]-1))/2;
		     }
	}
   }



g<<n*(n-1)/2 - res;
f.close();
g.close();
return 0;
}