Cod sursa(job #1744421)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 19 august 2016 19:17:02
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <cstdio>
#define MAXM 1000000
char vf[MAXM+1];
int ciur[MAXM+1];
int main(){
   FILE*fi,*fout;
   int i,n,x,j,max,flag,con,nr,div;
   long long rez,y;
   fi=fopen("pairs.in" ,"r");
   fout=fopen("pairs.out" ,"w");
   fscanf(fi,"%d " ,&n);
   max=0;
   for(i=1;i<=n;i++){
      fscanf(fi,"%d " ,&x);
      vf[x]=1;
      if(x>max)
        max=x;
   }
   for(i=2;i*i<=max;i++)
    if(ciur[i]==0)
      for(j=2*i;j<=max;j+=i)
        ciur[j]=i;
   for(i=2;i<=max;i++)
     if(ciur[i]==0)
       ciur[i]=i;
   rez=0;
   for(i=2;i<=max;i++){
       nr=i;
       con=0;
       flag=1;
       while(nr>1&&flag==1){
          div=ciur[nr];
          x=0;
          while(div==ciur[nr]){
             nr/=div;
             x++;
          }
          if(x>1)
            flag=0;
          con++;
       }
       if(flag==1){
          x=0;
          for(j=i;j<=max;j+=i)
             x+=vf[j];
          y=x;
          if(con&1)
            rez=rez+(y*(y-1))/2;
          else
            rez=rez-(y*(y-1))/2;
       }
   }
   fprintf(fout,"%lld" ,rez);
   fclose(fi);
   fclose(fout);
   return 0;
}