Cod sursa(job #314304)

Utilizator dya_ndmNanuti Diana-Maria dya_ndm Data 11 mai 2009 09:26:03
Problema Sum Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<stdio.h>
#include<math.h>
#define LMAX 500

long n,x;

char c[550];

void ciur(long n)
{
long long i,j;
for(i=1;2*i+1<=n;++i)
   if(c[i]==0)
     for(j=2*i*i+2*i;2*j+1<=n;j=j+2*i+1)
         c[j]=1;
}

long long phi()
{
long i,ti,cx,nr,lim,fi=1;
lim=sqrt(x);
ti=1;
i=1;
cx=x;
if((x%2==1)&&(c[(x-1)/2]==0))
  return x-1;

if(lim*lim==x)
  {
  nr=x-1;
  if(c[(lim-1)/2]==0)
    return nr-x/lim+1;
  if(x%2==0)
     nr=nr-x/2+1;
  while(ti<lim)
     {
     ti=2*i+1;
     if(c[i]==0)
       if(cx%ti==0)
          nr=nr-x/ti+1;
     ++i;
     }
  return nr;
  }

while(ti<=lim)
     {
     ti=2*i+1;
     if(c[i]==0)
       if(cx%ti==0)
         {
         fi=fi*(ti-1);
         cx=cx/ti;
         }
     ++i;
     }
if(cx>1)
     fi=fi*(cx-1);
return fi;
}

int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
int i;
long long s;
ciur(LMAX);

scanf("%ld",&n);

for(i=1;i<=n;++i)
   {
   scanf("%ld",&x);
   s=phi();
   s=2*s*x;
   printf("%lld\n",s);
   }
return 0;
}