Cod sursa(job #183036)

Utilizator katakunaCazacu Alexandru katakuna Data 21 aprilie 2008 17:28:18
Problema Indep Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include<stdio.h>
#include<math.h>

int  l,a[1010],ok2,nrf,aux,ok,d,m,p,i,v[1110],max,j;

char ap[1111],t[1111];
int P[1111];
long long A,res,n;


int main(){


FILE *f=fopen("indep.in","r");
fscanf(f,"%lld",&n);

  for(i=1;i<=n;i++){
  fscanf(f,"%d",&v[i]);

   if(v[i]>max)
   max=v[i];

   ap[v[i]]=1;

  }

fclose(f);


   for(i=1;i<=max;i++){
     for(j=i;j<=max;j+=i){
       if(ap[j])
       a[i]++;

     }

   }



   for(i=2;i<=(int)(sqrt(max));i++){
    if(!t[i])
      for(j=i+i;j<=(int)(sqrt(max));j+=i)
      t[j]=1;

   }


p=0;

   for(i=2;i<=(int)(sqrt(max));i++)
   if(!t[i]){
   p++;
   P[p]=i;
   }


  for(i=1;i<=max;i++){

   if(a[i]){
   nrf=0;
   aux=i;
   ok=1;
   d=1;
   m=0;

     while(aux!=1&&d<=p){
     ok2=1;
     m=0;

       while(!(aux%P[d])){

	if(ok2)
	nrf++;

       m++;

       aux/=P[d];
       }

      if(m>1){
      ok=0;
      break;
      }


     d++;
     }


     if(ok){

      if(aux>1)
      nrf++;

      if(nrf%2==1){

      A=1;
	for(l=1;l<=a[i];l++)
	A*=2;

	A--;
	A-=a[i];


      res-=A;

      }

      else{

      A=1;
	for(l=1;l<=a[i];l++)
	A*=2;

	A--;
	A-=a[i];


      res+=A;


      }


     }


   }


  }



FILE *g=fopen("indep.out","w");
fprintf(g,"%lld",res);
fclose(g);

return 0;
}