Cod sursa(job #183658)

Utilizator katakunaCazacu Alexandru katakuna Data 22 aprilie 2008 13:56:54
Problema Indep Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
#include<stdio.h>   
#include<math.h>   
  
long   l,a[1010],ok2,nrf,aux,ok,d,m,p,i,v[1110],max,j;

char ap[1111],t[1111];
long 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,"%ld",&v[i]);
  
   if(v[i]>max)   
   max=v[i];   
  
   //ap[v[i]]++;;   
  
  }   
  
fclose(f);   
  
  
   for(i=1;i<=max;i++){   
     for(j=1;j<=n;j++){   
  
       if(!(v[j]%i))   
       a[i]++;   
  
  
     }   
  
   }   
  
  
  
   for(i=2;i<=max;i++){   
    if(!t[i])   
      for(j=i+i;j<=max;j+=i)   
      t[j]=1;   
  
   }   
  
  
p=0;   
  
   for(i=2;i<=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;   
}