Cod sursa(job #314831)

Utilizator dya_ndmNanuti Diana-Maria dya_ndm Data 13 mai 2009 10:43:10
Problema Sum Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 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 euler()
{
long long i,phi=x,d=0,dmax;

if(x==2)
  return 1;
if(x%2!=0)
  {
  if(c[(x-1)/2]==0)
    return x-1;
  }
dmax=sqrt(x);
while(x%2==0)
  {
  phi=phi/2;
  x=x/2;
  }
i=1;
while(d<=dmax && x>1)
     {
     if(c[i]==0)
       {
       d=2*i+1;
       while(x%d==0)
            x=x/d;
       if(x)
         phi=phi/d*(d-1);
       }
     ++i;
     }
if(x>1)
  phi=phi/x*(x-1);
return phi;
}

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

scanf("%ld",&n);

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