Cod sursa(job #109955)

Utilizator portocalaDiculescu Elena Alexandra portocala Data 25 noiembrie 2007 12:59:41
Problema Pairs Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasa a 10-a Marime 0.91 kb
#include<fstream.h>
#include<math.h>
#define dim 100000
ifstream f("pairs.in");
ofstream g("pairs.out");
unsigned long n,j,v[dim],sol;
int viz[dim];

void rade(unsigned long i,unsigned long d)
{while(i<=n)
 {if((v[i]%d)==0)
  {while(!(v[i]%d))v[i]=v[i]/d;
   if(!viz[i])
   {viz[i]++;j++;}
  }
  i++;
 }
}

void rez(unsigned long i)
{unsigned long jum,d;
 j++;
 if(!(v[i]%2))
  {while(!(v[i]%2))v[i]=v[i]/2;
   rade(i+1,2);
  }
 jum=sqrt(v[i]);
 for(d=3;d<=jum;d+=2)
  if((v[i]%d)==0)
  {while(!(v[i]%d))v[i]=v[i]/d;
   rade(i+1,d);
  }
 if(v[i]>1)rade(i+1,v[i]);
}

unsigned long comb(unsigned long x)
{if(x%2) return ((x-1)/2*x);
 return (x/2*(x-1));
}

int main()
{f>>n;
unsigned long i,ii;
for(i=1;i<=n;i++)
f>>v[i];
f.close();
sol=comb(n);
for(i=1;i<n;i++)
 {j=0;
  rez(i);
  sol-=comb(j);
  for(ii=i+2;ii<=n;ii++)
   viz[ii]=0;
 }
g<<sol<<'\n';
g.close();
return 0;
}